我在stackoverflow上看过一些帖子。但他们让我感到困惑。我无法理解背后的逻辑。因此我问这个问题:
#include <iostream>
using namespace std;
int main ()
{
int pancakes[10] = { 0};
int z = 0;
int i = 0;
int c = 1;
int temp;
do
{
cout << "Please enter the number of pancakes eaten by person " << c++ << " : ";
cin >> z;
cout << "Person " << i << " eaten " << z << " cakes in morning! " << endl;
pancakes[i] = z;
i++;
}while ( i < 10);
for ( i = 1; i < 10; i++)
{ //For loop to search person eaten maximum pancakes
if ( pancakes[i]>temp)
{
temp = pancakes[i];
cout << "The person who eaten most number is " << temp <<endl;
}
}
system("pause");
}
For循环在屏幕上打印最大数字,但它也会打印一些其他值。 当我得到最大值时,怎么能打印吃掉大部分煎饼的人呢?例如,如果人6吃了大部分煎饼。然后应该打印,第6个人吃了大部分煎饼。 我正在使用Devcpp IDE。任何帮助将不胜感激。
答案 0 :(得分:0)
你不应该在for循环中小丑。 for循环是为了找到吃最多煎饼的人,你不知道那个人是谁,直到之后 for循环结束。
相反,在for循环期间,请跟踪谁吃了最多的煎饼:
声明一个int来表示吃最多煎饼的人的索引。在 for循环之前执行。
在for循环的if内部,将该int设置为等于i。
cout在for循环之后
编辑:将int temp更改为int temp = 0
答案 1 :(得分:0)
您的代码包含太多不必要的变量。而且,你的做法并不适合吃最多煎饼的人,而是他们吃的煎饼数量。
此外,您应该将任何变量的范围限制为必要的最小值(以避免错误)并为它们提供有意义的名称(而不是i
和z
等)。
最后,从不说using namespace std
。
#include <iostream>
int main ()
{
int pancakes[10]; // the number of pancakes each person had
// 1. intialise pancakes[]
for(int person=0; person!=10; ++person) { // loop to read data from stdin
std::cout << "Please enter the number of pancakes eaten by person "
<< person++ << " : ";
std::cin >> pancakes[person];
std::cout << "Person " << person << " has eaten " << pancakes[person]
<< " cakes in morning! " << std::endl;
}
// 2. find the first person who ate most
int ate_most=0; // only need one variable: person who ate most
// initially, person 0 is our candidate
for(int person=1; person!=10; ++person) // loop to check other persons
if(pancakes[person] > pancakes[ate_most])
ate_most=person;
// 3. print out result
std::cout << "Person " << ate_most << " has eaten most pancakes, namely "
<< pancakes[ate_most] << std::endl;
}
答案 2 :(得分:0)
问题:
变量名称太可怕了。一个好的变量名称描述了变量代表的内容。没有人看这段代码可以告诉你什么是z没有阅读代码,看看它是如何使用的。
temp
似乎储存了最多的煎饼,未经初始化。这将导致各种古怪的行为。轻松修复:
int temp = 0;
或更好
int mostPancakesEaten = 0;
最终的for循环将打印出当前的煎饼食用者,每当它找到一个比以前所有食用者都吃的食用者时。
考虑三个煎饼食者,按顺序吃1个,2个和5个煎饼
对于第一人来说,没有任何反应! for循环从i = 1开始,person 1在i = 0;
对于第2个人
if ( 2>0) // true, enter
{
temp = 2;
cout << "The person who eaten most number is " << 2 <<endl;
}
输出:吃多数的人是2
对于第3个人
if ( 5>2) // true, enter
{
temp = 5;
cout << "The person who eaten most number is " << 5 <<endl;
}
输出:吃多数的人是5
请注意煎饼的数量,而不是打印它们的人。
禁止进食的4至10号人员也被处理:
if ( 0>5) // false, skip
if ( 0>5) // false, skip
if ( 0>5) // false, skip
if ( 0>5) // false, skip
if ( 0>5) // false, skip
if ( 0>5) // false, skip
if ( 0>5) // false, skip
所以输出是
The person who eaten most number is 2
The person who eaten most number is 5
Whups。
如何解决这个问题:
全力以赴。抱歉。这不值得修理。
#include <iostream>
#include <limits> // needed for std::numeric_limits<std::streamsize>::max()
int main ()
{
int numPancakes = 0;
int person;
int mostPancakes = 0;
int ateMost = 0;
for ( person = 1; person <= 10; person++) // for persons 1 through 10
{
std::cout << "Please enter the number of pancakes eaten by person "
<< person << " : " << std::endl;
while (!(std::cin >> numPancakes) && numPancakes < 0)
{ // user put in a bad value. Keep asking until they get it right
std::cin.clear(); // clear error flag
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// Throw out any other garbage the user fed in up to the end of the line
std::cout << "Please enter the number of pancakes eaten by person "
<< person << " : " << std::endl;
}
std::cout << "Person " << person << " ate " << numPancakes
<< " cakes in the morning! " << std::endl;
if (numPancakes > mostPancakes)
{
mostPancakes = numPancakes;
ateMost = person;
}
}
std::cout << "The person who ate the most pancakes is " << ateMost << std::endl;
}
请注意,这不会处理关系。