[求助]结构体排序答案输出错误,求指点
输入 4
bt_2012211111 5 8 100
bt_2012212222 4 0 200
bt_2012213333 5 0 150
bt_2012214444 6 9 200
第一行为一个整数n(1<n<10),后面是n行考生数据,共4列,每列之间以空格分隔。
其中第一列为考生帐号(固定15位的字符串,格式为bt_**********,其中所有的*均为数字),
第二列为该生正确解答的题目数(大于等于0,且小于10的整数),
第三列为该生正确解答的题目中错误提交的次数(大于等于0,且小于100的整数),
第四列为从考试开始到该生最后一次正确提交时的分钟数(大于等于0,且小于300的整数)。
以正确提交的次数num从大到小对账号进行排序,但如果甲、乙两同学都正确完成两道题目,
其中甲同学最后正确提交的时间是考试开始后200分钟,
乙同学为180分钟,但乙同学有一题提交了3次(错误提交为2次,罚时为40分钟)。
这样甲同学的总用时为200分钟而乙同学为180 + 40 = 220 分钟,所以甲同学总用时少,排名靠前。
输出
bt_2012214444
bt_2012213333
bt_2012211111
bt_2012212222
#include<stdio.h>
#include<string.h>
#define N 10
struct student
{
char name[20];
int num;
int fals;
int time;
} stu[N];
int main()
{
int n,i,j,k[10],m,f,t,c,q;
char str1[20],str2[20];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s%d%d%d",&stu[i].name,&stu[i].num,&stu[i].fals,&stu[i].time);
//对所有元素根据num从大到小进行重新排序
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;j++)
{
if(stu[i].num<stu[i+1].num)
{
strcpy(str1,stu[i].name);
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i+1].name,str1);
m=stu[i].num;
stu[i].num=stu[i+1].num;
stu[i+1].num=m;
f=stu[i].fals;
stu[i].fals=stu[i+1].fals;
stu[i+1].fals=f;
t=stu[i].time;
stu[i].time=stu[i+1].time;
stu[i+1].time=t;
}
}
//根据提交错误次数和时间进行排序
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;j++)
{
if(stu[i].num==stu[i+1].num)
{
c++;
k[i]=stu[i].time+20*stu[i].fals;
for(j=0;j<c;j++)
for(i=0;i<c-j;i++)
{
if(k[i]>k[i+1])
{
strcpy(str2,stu[i].name);
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i+1].name,str2);
}
}
}
}
//根据排序输出结果
for(i=0;i<n;i++)
{
printf("%s\n",stu[i].name);
}
return 0;
}
输出的结果不对,求指点
[ 本帖最后由 tiki 于 2015-4-19 18:38 编辑 ]