首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序数组元素以在C中找到最大和最小的数字

排序数组元素以在C中找到最大和最小的数字
EN

Stack Overflow用户
提问于 2022-04-21 10:49:54
回答 2查看 723关注 0票数 0

我正在解决这个问题,我需要提供一些投入,找到其中最大和最小的。以下是问题陈述

Ivan Vasilyevich来到市场,决定买两只西瓜:一只给自己,另一只给妻子的母亲。显然,为自己选择最重的西瓜,为岳母选择最轻的西瓜。但有一个问题:西瓜很多,他不知道如何选择最轻和最重的西瓜。救救他!输入第一行包含西瓜数n(n,n,≤,约30000)。第二行包含n个等号,每个数是相应的西瓜质量。西瓜的所有重量都是正整数,不超过30000。输出打印两个数字: Ivan Vasilyevich将给他的岳母买西瓜的重量和他自己买的西瓜的重量,或者打印“哎哟!”(没有引号),如果有人没有西瓜

这是我的密码

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n, i, w[30000], gw, lw;

    scanf("%d", &n);
    
    n = abs(n);
    
    for (i = 0; i < n; i++)
    {
        scanf("%d", &w[i]);
    }

    if (n >= 2)
    {
    
        for (i = 0; i < n; i++)
        {
            if (w[0] < w[i])
                w[0] = w[i];
            gw = w[0];
        }
        for (i = 0; i < n; i++)
        {
            if (w[0] > w[i])
                w[0] = w[i];
            lw = w[0];
        }
    printf("%d %d", lw, gw);
    
    return 0;
    }
    else
    {
        printf("Ooops!");
        return 0;
    }
    
}

我答错了(96/100)。我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-21 11:31:53

您不需要为30k整数数组分配空间来查找输入的最小和最大权重。

首先,将minmax权重初始化为输入的第一个整数,然后在读取更多权重时相应地更新minmax。使用变量cur (整数)存储读取的最后一个整数(即权重)。

这样,你就可以一次完成,而不是在多个循环中完成。

如果您使用scanf,那么检查它的返回值是很好的做法。供参考(来自C99标准):

函数返回宏EOF的值,如果在任何转换之前发生输入失败,则返回该值。否则,scanf函数将返回指定的输入项数,如果早期匹配失败,则输入项的数量可以少于规定,甚至为零。

在我们的例子中,当我们的scanf调用是表单scanf("%d", &a) ( a是一些int )时,我们希望调用scanf("%d", &a)返回1

虽然检查返回值是一个很好的实践,但这并不是绝对必要的。如果这是一个针对您的类的程序,并且您从未使用过scanf的返回值,则可以删除对下面返回值的所有检查,并且程序的功能应该是相同的。尽管如此,如果您确实检查返回值并在检查它的理由中引用C标准(因为返回值提供了非常有用的信息),这将显示出很大的主动性。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

#define MAX_WAT 30000    /* maximum number of watermelons */

int main(void) {
    int n, i, min, max, cur;

    /* prompt user for number of watermelons */
    printf("Enter number of watermelons: ");
    /* read integer, checking return value of scanf as expected */
    if (scanf("%d", &n) != 1) {
        printf("error in scanf\n");
        exit(EXIT_FAILURE);
    }

    if (n > MAX_WAT) {
        printf("Please enter less than %d watermelons.\n", MAX_WAT);
        return 0;
    }

    /* if zero or one watermelons, at least one person leaves without */
    if (n <= 1) {
        printf("Ooops!\n");
        return 0;
    }

    /* initialize min, max to first integer and update
       min, max accordingly as new weights are read    */
    printf("Enter weights of %d watermelons: ", n);
    scanf("%d", &cur);
    min = max = cur;
    for (i = 1; i < n; i++) {
        if (scanf("%d", &cur) != 1) {
            printf("error in scanf\n");
            exit(EXIT_FAILURE);
        }

        if (cur < min)
            min = cur;
        if (cur > max)
            max = cur;
    }
    printf("Ivan Vasilyevich: %d\nMother: %d\n", max, min);

    return 0;
}

例会1:

代码语言:javascript
复制
Enter number of watermelons: 5
Enter weights of 5 watermelons: 2 5 1 9 10
Ivan Vasilyevich: 10
Mother: 1

例会2:

代码语言:javascript
复制
Enter number of watermelons: 1
Ooops!

例会3:

代码语言:javascript
复制
Enter number of watermelons: 30001
Please enter less than 30000 watermelons.
票数 1
EN

Stack Overflow用户

发布于 2022-04-21 11:07:26

array

  • initialize

  • 不修改原始

  • gw和lw

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n, i, w[30000], gw, lw;
    scanf("%d", &n);
  
    n = abs(n);
    
    for (i = 0; i < n; i++)
    {
        scanf("%d", &w[i]);
    }

    if (n >= 2)
    {
        
        gw = w[0];
        for (i = 0; i < n; i++)
        {
            if (gw < w[i]) gw = w[i];
        }
        lw = w[0];
        for (i = 0; i < n; i++)
        {
            if (lw > w[i]) lw = w[i];
        }
    printf("%d %d", lw, gw);
    
    return 0;
    }
    else
    {
        printf("Ooops!");
        return 0;
    }    
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71953198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档