输入文件(sort.in)
共n+1行
第1行,两个整数n,k,表示有n个同学参加了考试,考了k门;
第1~n+1行,每行k+1个整数,描述1位同学的学号、科目1成绩、科目2成绩、……科目k成绩。
输出文件(sort.out)
共一行,10个整数,排名顺序输出前10名同学的学号,两个数据之间用一个空格隔开。
#include<stdio.h>
int m[10];
int s[100000];
long int n;
void sort()
{
int i,j,k,t,max,x=0;
scanf("%ld %d",&n,&k);
for(i=0;i<n;i++)
{
scanf("\n");
s[i]=0;
for(j=0;j<k;j++)
{
scanf("%d",&t);
getchar();
s[i]=s[i]+t;
}s[i]=s[i]-i-1;//总分记录,减去第一个学号数
}
while(x<=10)
{
max=s[0];
m[x]=1;//学号记录
for(i=1;i<n;i++)
{
if(s[i]>max)
{
max=s[i];
m[x]=i+1;
}
}
s[m[x-1]]=0;
x++;
}
}
void print()
{
int i;
for(i=0;i<10;i++)
printf("%d",m[i]);
}
void main()
{
sort();
print();
}
求看程序问题
问题略多,sort()里接收并计算成绩那部分s[i]=s[i]-i;是什么意思?
下面找最高的10个成绩时 s[t]=0;岂不不是最高的成绩都清0了?
m[x++]=max;这句m[]数组里面不应该放学号吗?怎么放成绩了?
print()函数里面的for循环循环条件不能等于10。
最后部分s[t] = 0; , m[x++] = max;
我想这两个一定在循环外。
就这样。
for(j=0;j {
max=s[0];
for(i=1;i {
if(s[i]>max)
{
max=s[i];
t=i;
}
}
s[t]=0;
m[x++]=max;
}
试试吧。
s[i]=s[i]-i:每行第一个输入的是学号所以减掉学号;s[t]=0:要输出前十名所以每次循环找最大之前将前一个最大置0,前十名存入数组m【】