给出n个数,找出这n个数的最大值,最小值,和。

问题如下:

img

img

#include
int main()
{
    int n = 0, a[10000] = { 0 }, i = 0, j = 0, k = 0, sum = 0;
    scanf("%d", &n);
    if(n>=-10000&&n<=10000)
    {
        for (i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        k = a[0];
        for (i = 0; i < n; i++)
        {
            if (k <= a[i + 1])
            {
                k = a[i + 1];
            }
        }
        j = a[0];
        for (i = 0; i < n; i++)
        {
            if (j >= a[i + 1])
            {
                j = a[i + 1];
            }
        }
        for (i = 0; i < n; i++)
        {
            sum += a[i];
        }
        printf("%d\n%d\n%d", k, j, sum);
    }
    return 0;
}

想问一下我的答案为什么只有八十分呀,vs调试没有问题呀

计算最大值和最小值那里都有点错误,因为a[i+1]会导致数组越界,有两种解决办法:

1、把两个if里面的a[i+1]都改为a[i],即比较数组里的每个数,然后计算出最大值与最小值;

2、把判断判断最大值最小值那两个for循环里的n都改为n-1,即保证数组不越界,同时又还可以保持使用a[i+1]的方式来寻找最大值最小值。

下面的例子采用第一种办法,修改如下:

#include<stdio.h>
int main()
{
    int n = 0, a[10000] = { 0 }, i = 0, j = 0, k = 0, sum = 0;
    scanf("%d", &n);
    if(n>=-10000&&n<=10000)
    {
        for (i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        k = a[0];
        for (i = 0; i < n; i++)
        {
            if (k <= a[i ])
            {
                k = a[i ];
            }
        }
        j = a[0];
        for (i = 0; i < n; i++)
        {
            if (j >= a[i ])
            {
                j = a[i];
            }
        }
        for (i = 0; i < n; i++)
        {
            sum += a[i];
        }
        printf("%d\n%d\n%d", k, j, sum);
    }
    return 0;
}
 

img

#include <stdio.h>

int main()
{
    int n = 0, a[10000] = { 0 }, i = 0, j = 0, k = 0;
    long long sum = 0; // 这里改成long long,最多有10000个数,用int可能会溢出
    scanf("%d", &n);
    // 这里没必要加判断,题目给数据总不会给错吧,当然,这个不影响结果
    // if (n >= -10000 && n <= 10000)
    // {
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    k = a[0];
    for (i = 0; i < n; i++)
    {
        if (k <= a[i + 1])
        {
            k = a[i + 1];
        }
    }
    j = a[0];
    for (i = 0; i < n - 1; i++)  // 这里要注意,i要< n - 1因为如果是i < n的话当i=n-1时,就会和a[i+1]比较,也就是a[n],这个值其实是0,所以这样子最小值不准确。
    {
        if (j >= a[i + 1])
        {
            j = a[i + 1];
        }
    }
    for (i = 0; i < n; i++)
    {
        sum += a[i];
    }
    printf("%d\n%d\n%d", k, j, sum);
    // }
    return 0;
}

在计算最小值时有错误,
应该是在遍历整个数组时再与当前最小值进行比较,而不是与下一个数字进行比较

for (i = 0; i < n; i++)
{
    if (j > a[i])
    {
        j = a[i];
    }
}