寻找最大和第二大数字

时间:2016-07-15 12:21:45

标签: c

  

编写一个程序,输入一系列10个数字,并找到10个数字的2个最大值? (仅使用if和loop)

有人可以帮我解决问题吗?我试过但是不对。它无法列出第二大数字。任何帮助将不胜感激。

  #include "stdafx.h"
  #include <stdio.h>
  #include <stdlib.h>
  #include <math.h>


int main()
{
    int counter = 0, number, largest = 0,largest2=0;
    for (counter = 1; counter <= 10; counter++) {
        printf("Enter number (%d): ", counter);
        scanf_s("%d", &number);
        if (number > largest)
        {
            largest = number;
        }
        else
        {
            if (number > largest2)
                largest2 = number;
        }
    }
    printf("The largest number is %d\n", largest);
    printf("The second largest number is %d\n", largest2);
    system("pause");
    return 0;
}

4 个答案:

答案 0 :(得分:13)

当你得到一个新的最大数字时,旧的最大数字成为第二大数字。因此,您只需要检查最大数量和两个分配。

这样的东西
if (number > largest)
{
    largest2 = largest;
    largest = number;
}

您仍需要检查大于largest2的数字。

答案 1 :(得分:3)

你的逻辑必须改进:

  • 当你获得一个新的最大数字时,你必须更新第二大数字,因为前一个最大数字成为第二大数字。
  • 此外,您应该将最大值和第二大值初始化为INT_MIN,以便正确处理负数。
  • 您还必须检查scanf_s()的返回值,如果用户输入的号码无法退出,则必须退出。

以下是改进版本:

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int number, largest = INT_MIN, largest2 = INT_MIN;

    for (int counter = 1; counter <= 10; counter++) {
        printf("Enter number %d: ", counter);
        if (scanf_s("%d", &number) != 1) {
            printf("input failure\n");
            return 1;
        }
        if (number > largest) {
            largest2 = largest;
            largest = number;
        } else
        if (number > largest2) {
            largest2 = number;
        }
    }
    printf("The largest number is %d\n", largest);
    printf("The second largest number is %d\n", largest2);
    system("pause");
    return 0;
}

答案 2 :(得分:1)

在以下代码中:

if (number > largest)
    {
    largest = number;
    }

你扔掉已知的最大数字,而这个数字应该成为第二大数字。所以你应该添加最大的2行=

注意:通过将最大值和最大值2初始化为零,算法不会对负数起作用。

答案 3 :(得分:1)

如果number大于largest,您也应该更新largest2,因为现在您发现的数字大于之前的数字,largest成为第二大数!

    if (number > largest)
    {
        largest = number;
    }

变为

    if (number > largest)
    {
        largest2 = largest;
        largest = number;
    }