煎饼馋嘴的最大价值

时间:2015-09-12 21:18:42

标签: c++

我在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。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

你不应该在for循环中小丑。 for循环是为了找到吃最多煎饼的人,你不知道那个人是谁,直到之后 for循环结束。

相反,在for循环期间,请跟踪谁吃了最多的煎饼:

  1. 声明一个int来表示吃最多煎饼的人的索引。在 for循环之前执行

  2. 在for循环的if内部,将该int设置为等于i。

  3. cout在for循环之后

  4. 将值(以及其他任何信息,例如吃掉的最大煎饼数量)

    编辑:将int temp更改为int temp = 0

答案 1 :(得分:0)

您的代码包含太多不必要的变量。而且,你的做法并不适合吃最多煎饼的人,而是他们吃的煎饼数量。

此外,您应该将任何变量的范围限制为必要的最小值(以避免错误)并为它们提供有意义的名称(而不是iz等)。 最后,从不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;
}

请注意,这不会处理关系。