2015-09-01 2 views
0

Я работаю над некоторыми упражнениями новичка и добрался до этого вопроса, «Блины».Как вывести, какой пользователь ввел каждое значение?

«Напишите программу, которая просит пользователя ввести количество блинов, съеденных на завтрак 10 разными людьми (Person 1, Person 2, ..., Person 10) Как только данные были введены, программа должна проанализировать данные и выход, который человек съел больше всего блины на завтрак.

★ Измените программу так, чтобы она также выходы, которые человек ел наименьшее количество блинов на завтрак.

★★★★ Измените программу так, чтобы он выводит список в порядке количества блинов, съеденных из всех 10 человек.

т.е.

Person 4: ate 10 pancakes 
Person 3: ate 7 pancakes 
Person 8: ate 4 pancakes 
... 
Person 5: ate 0 pancakes" 

мне удалось вывести большинство и наименьшее количество блинов поели, но я застрял на последнем бите!

Я могу выпустить количество блинов, съеденных в нисходящем порядке, то есть 6,5,4,3,2 и т. Д., Но я изо всех сил пытаюсь определить, как назначить каждому количеству блинов потребителю, который их съел?

Я пробовал использовать ту же технику, что и с двумя другими для циклов, но я знаю, что это неверно, так как этот метод не назначает пользователю их количество блинов.

Я чувствую, что мне не хватает чего-то довольно простого здесь! Спасибо за любую помощь!

#include <iostream> 
using namespace std; 
int main() 
{ 
    cout << "how many pancakes did you eat for breakfast?" << endl; 

    int person1, person2, person3, person4, person5; 
    cout << "Person 1: "; 
    cin >> person1; 

    cout << "Person 2: "; 
    cin >> person2; 

    cout << "Person 3: "; 
    cin >> person3; 

    cout << "Person 4: "; 
    cin >> person4; 

    cout << "Person 5: "; 
    cin >> person5; 

    int array[5] = {person1, person2, person3, person4, person5}; 
    int temp = 0; 
    int res = -1; 

    for (int i = 0; i < 5; i++) 
    { 
     if (array[i] > temp) 
     { 
      temp = array[i]; 
      res = i; 
     } 
    } 
    cout << "The most pancakes eaten was " << temp << " by Person " << (res+1) << endl; 

    int smallest = array[0]; 
    int res2 = 0; 

    for (int i = 1; i < 5; i++) 
    { 
     if (array[i] < smallest) 
     { 
      smallest = array[i]; 
      res2 = i; 
     } 
    } 
    cout << "The least pancakes eaten was " << smallest << " by Person " << (res2+1) << endl; 

    int temp3 = 0; 
    int res3 = 0; 

    for (int i = 0; i < 5; i++) 
    { 
     for (int j = 0; j < 5; j++) 
     { 
      if (array[i] > array[j]) 
      { 
       temp3 = array[i]; 
       array[i] = array[j]; 
       array[j] = temp3; 
       res3 = i; 
      } 
     } 
    } 

    for (int i = 0; i < 5; i++) 
    { 
     cout << "Person " << res3 << " ate " << array[i] << " pancakes" << endl; 
    } 
} 

ответ

2

Ваша проблема в том, что вы теряете связь между индексом и номером.По-видимому, вам нужно работать с структурой данных, которая содержит как идентификатор человека, так и количество блинов, которые он съел.

struct PancakeEater { 
    int numberOfPancakes; 
    int personId; 
}; 

Если бы я тебя, я бы отказаться от сырых массивов, и попытаться использовать std::vector<PancakeEater> и использование алгоритмов как std::sort. Это описано in another question.

1

Общим трюком для таких проблем является сортировка индексов вместо сортировки фактических значений.

Вот эта идея: сделайте массив индексов idx и залейте его цифрами 0 - N, где N в вашем случае - пять. Затем сделать ваш сортировки с двумя модификациями:

  • Вместо сравнения array[i] к array[j], сравнить array[idx[i]] к array[idx[j]] и
  • Вместо замены array[i] и array[j], поменять idx[i] и idx[j]

После сортировки полный, массив idx представляет собой индексы блинов, отсортированных по количеству блинов, которые они съели. Например, если вы ввели

3 5 6 2 4 

тогда ваш idx массив будет выглядеть следующим образом после сортировки:

2 1 4 0 3 

Вы можете распечатать этот массив, наряду с содержанием array[], для получения желаемых результатов:

for (int i = 0 ; i != N ; i++) { 
    cout << "Person " << (idx[i]+1) << " ate " << array[idx[i]] << " pancakes" << endl; 
} 
Смежные вопросы