
#include "stdio.h"
2.scanf("%d",a[n]) 不是这样写的
应该为:scanf("%d",&a[n])
3.另外还有输出,以现在的样子输出结果是
A=(5,3,4,7,3,5,6) 则输出为: (2,0,1,4,0,2,3)
而不是要求的
A=(5,3,4,7,3,5,6) 则输出为: (3,1,2,5,1,3,4)
所以要改:
b[k]=j+1
【其实我觉得这条并不算错,如果要求不苛刻的话】
4.这个程序输出的格式必将不让人恭维,如果觉得有必要改的话,还是可以改改的,到不能算错
就算是把后面输出部分改成:
for(i=0i<10i++)
printf("%d ",a[i])
printf("\n")
for(i=0i<10i++)
printf("%d ",b[i])
printf("\n")
【这个没必要改,纯属美容工作】
你的问题是对十个数字,找出其中最大的三个数的序号(对应数组的下标和皮哪)。
方法不止一种,我的思路:
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=0i<Mi++)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=0i<Mi++)
printf("数字%d,序号%d。\n",num[x[i]],x[i])
return 0
}
字段格式将文字改成数字即可。在数据库记录中,只有写入的先后顺序,你说的前几行,是指输出的结果,输出的结果由排序来确定。如 select * from tb order by 序号,欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)