2015-11-09 8 views
0

Спасибо каждому из вас за вашу помощь заранее.C++: проблемы с поиском наибольшего значения в массиве

Проблема первая:

я писал программу сегодня, которая должна отображать максимальное значение из 10 значений, которые пользователь будет входным. Тем не менее, всякий раз, когда я тестирую программу и вводимые значения, она, кажется, отображает более одного «наибольшего значения». Я думаю, что это может быть связано с моим чрезмерным использованием функций cout и cin. Похоже, что программа переходит в список значений, вводимых пользователем, и выбирает самые высокие из них, идущие вниз по списку.

Например:

2, 4, 5, 1, 7, 8, 3, 2, 9 

Было бы выбрать 5, 8 и 9 в качестве самых высоких значений.

Проблема вторая:

мне было интересно, если есть способ, чтобы упростить код, который я написал ниже (в ссылке на соиЬ и CIN функций). Такие, как, что делает функцию, пока и имеющий функцию, как:

while (something) 
     cout << "Please input the number of pancakes person " << x << "has ate.\n" 
     cin >> something // Either x or a pancakes function. I tried both. 
     count++ // Sorry, I would just assume that the count function would be used in this scenario. 

Задача 3:

Что касается наибольшего вывода значения в моей программе, может быть, что я испортил что-то с массивом?

Код:

#include <iostream> 

using namespace std; 

int main() 
{ 
    int pancakes [10]; 
    int x; 
    int largestValue = 0; 

    cout << "Please input the number of pancakes person 1 has ate.\n"; 
    cin >> pancakes[0]; 
    cout << "Please input the number of pancakes person 2 has ate.\n"; 
    cin >> pancakes[1]; 
    cout << "Please input the number of pancakes person 3 has ate.\n"; 
    cin >> pancakes[2]; 
    cout << "Please input the number of pancakes person 4 has ate.\n"; 
    cin >> pancakes[3]; 
    cout << "Please input the number of pancakes person 5 has ate.\n"; 
    cin >> pancakes[4]; 
    cout << "Please input the number of pancakes person 6 has ate.\n"; 
    cin >> pancakes[5]; 
    cout << "Please input the number of pancakes person 7 has ate.\n"; 
    cin >> pancakes[6]; 
    cout << "Please input the number of pancakes person 8 has ate.\n"; 
    cin >> pancakes[7]; 
    cout << "Please input the number of pancakes person 9 has ate.\n"; 
    cin >> pancakes[8]; 
    cout << "Please input the number of pancakes person 10 has ate.\n"; 
    cin >> pancakes[9]; 

    for (int x = 0; x < 10; x++) 
     if (pancakes[x] > largestValue) 
    { 
      largestValue = pancakes[x]; 
     cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n"; 
    } 

    return 0; 

} 
+7

Как бы ваш код посмотреть, если там было 100 человек едят блины? –

+0

Вот почему я спросил, как это сделать, где я могу сказать: «Пожалуйста, введите количество блинов, которых хелел». (см. выше) –

+0

Вы, очевидно, знаете концепцию цикла for. Примените это к части «cout/cin» вашей программы. –

ответ

3

Проблема заключается в том, что вы печатаете каждый раз, когда новый максимум-значение выбрано в этой части кода:

for (int x = 0; x < 10; x++) { 
    if (pancakes[x] > largestValue) { 
     largestValue = pancakes[x]; 
    } 
    cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n"; 
} 

Вместо этого он должен быть:

for (int x = 0; x < 10; x++) { 
    if (pancakes[x] > largestValue) { 
     largestValue = pancakes[x]; 
    } 
} 
cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n"; 

К слову: я вам или вам придется использовать «съедать» (без «иметь») или «съесть».

Что касается другой проблемы не жесткого кодирования количества людей: Прежде всего, я бы использовал std::vector вместо массива. Тогда вы спрашиваете, сколько людей есть. Теперь вы можете создать цикл for с таким количеством итераций. На каждой итерации спрашивается пользователь, сколько человек блинов X съедает, и вы добавляете это число в конец вектора, используя std::vector::push_back. Наконец, вам просто нужно выбрать наибольшее число, как вы уже делали. Просто позвольте верхней границе вашего цикла for < vector.size().

+0

Спасибо! Как для кодирования, так и для английского совета! ха-ха. –

0

Заявление cout должно быть вне цикла. Ваш текущий cout печатает каждый раз, когда вы вводите заявление if (каждый раз, когда вы находите новый largestValue).

for (int x = 0; x < 10; x++) { 
    if (pancakes[x] > largestValue) 
    { 
     largestValue = pancakes[x]; 
    } 
} 

cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n"; 
+0

Спасибо! Синтаксис может быть довольно грубым в C++. –

+0

@BillFisher Добро пожаловать :) –

1
for (int x = 0; x < 10; x++) 
    if (pancakes[x] > largestValue) 
{ 
     largestValue = pancakes[x]; 
    cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n"; 
} 

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

for (int x = 0; x < 10; x++) 
    if (pancakes[x] > largestValue) 
    { 
     largestValue = pancakes[x]; 
    } 

cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n"; 
0

#include <iostream> 

using namespace std; 

int main() 
{ 
    int pancakes [10]; 
    int x; 
    int largestValue = 0; 

    for (int x = 0; x < 10; x++) { 
     cout << "Please input the number of pancakes person " << (x + 1) << " has ate.\n"; 
     cin >> pancakes[x]; 
    } 

    for (int x = 0; x < 10; x++) 
     if (pancakes[x] > largestValue) 
      largestValue = pancakes[x]; 

    cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n"; 

    return 0; 
} 

+0

Благодарим вас за помощь как в проблеме cout/cin, так и в самой большой проблеме! –

+0

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. – ryanyuyu

 Смежные вопросы

  • Нет связанных вопросов^_^