c语言把十个数排列在一起,怎样使它们最大的三个数用序号表示?

 我来答
自我编程
2020-11-26 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

你的问题是对十个数字,找出其中最大的三个数的序号(对应数组的下标和皮哪)。

方法不止一种,我的思路:

1、随机数生成10个数字组成数组num。

2、定义一个数组x,用于保存最大三个数字的下标(数字大小是从大到小)。

3、遍历num找出数组最小值的下标,将其保存到变量mi中。

4、用mi的值初始化x(也就是初始三个数都对应最小数字)。

5、再次遍历num,每次和x中对应的每一数对比,发现大于的,则当前x元素全部往后移动一位,并且将当前数值下标记录在x当前元素内。

最后得到的数组x就是题目要的序号。

PS:写程序考虑要扩展和通用,因此所有参数(数字个数,数字位数,最大数的个数)都定义成常量,只要修改常量可适应n个数排列,求最大m个数的序号。



#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define MN 10//最大数字个数

#define N 100//单个数字不超过

#define M 3//想要统计的最大数量(题目要最大前3,可改其它值)

int main()

{

    int i=0,num[MN],mi=0,x[M]={0},*p=&x[0],*p2=NULL;

    srand(time(NULL));

    printf("数组(随机)为:\n");

    while(i<MN)

    {

        num[i]=rand()%N;

        if(num[i]<num[mi])mi=i;//找出最小值序号

        printf("%d ",num[i++]);

    }

    for(i=0;i<M;i++)x[i]=mi;//用最小值下标初始化x数组

    printf("\n");

    i=0;

    while(i<MN)

    {

        p=&x[0];

        while(1)

        {

            if(num[i]>num[*p])

            {

                p2=&x[M-1];

                while(p2>p)*p2=*(p2-1),p2--;//x当前位往后依次后移

                *p=i;

                break;

            }

            else p++;

            if(p>&x[M-1])

                break;

        }

        i++;

    }

    printf("\n其中最大的三个数组序号分别为(序号从0开始):\n");

    for(i=0;i<M;i++)

        printf("数字%d,序号%d。\n",num[x[i]],x[i]);

    return 0;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式