C语言题目//求改错
/*
比赛7个人比赛结束,按照选手的出场顺序宣布最后得分和
最后名次,获得相同分数的选手具有相同的名次。
选手序号:1,2,3,4,5,6,7
选手得分:5,3,4,7,3,5,6
则输出名次为:3,1,2,5,1,3,4
*/
#include <stdio.h>
#define NUM 7 //人数
void Groups()
{
int array[NUM+1]={0,5,3,4,7,3,5,6};//选手成绩
int array_t[NUM+1]={0},array_tt[NUM+1]={0};
//array_t是已编名次的标记数组,array_tt是记录同名次元素的下标
int i,n,smallest,num,k,j;
num=1;//名次
for(i=1;i<=num;i++)//每次处理一个名次
if(array_t[i]==0)//找到第一个未处理的元素
{
smallest=array[i];//取第一个未处理元素当最小值
k=1;//数组array_tt下标,同名次人数
array_tt[k]=i;//记录分值为smallest的同名次元素的下标
for(j=i+1;j<=NUM;j++)//对余下的进行处理
if(array_t[j]==0)
if(array[j]<smallest)
{
smallest=array[j];//重新设置当前最小值
k=0;//重新设置同名次人数
array_tt[++k]=j;
}
else if(array[j]==smallest)
array_tt[++k]=j;
for(j=1;j<=k;j++)
array_t[array_tt[j]]=num;
num++;
i=0;
}
printf("player-NO Score Rank\n");
for(j=1;j<=NUM;j++)
printf("%3d %4d %4d\n",j,array[j],array_t[j]);
}
int main()
{
Groups();
}
[解决办法]
#include <stdio.h>#include <math.h>#include <conio.h>void sort(int array[],int n) //从小到大排序{ int i,j,k,t; for(i=0;i <n-1;i++) { k = i; for(j=i+1;j <n;j++) { if(array[j] <array[k]) { k = j; //循环结束k总是数值最小的下标 } } //将数值最小的放到位置i t=array[k]; array[k]=array[i]; array[i]=t; } } int main(void){ int record[2][7] = {{5,3,4,7,3,5,6},{0,0,0,0,0,0,0}}; int ptemp[7]; int num[7]; int i,j; for(i = 0; i<7; i++) { ptemp[i] = record[0][i]; } sort(ptemp,7); num[0] = 1; for(i = 1; i<7; i++) { if(ptemp[i] == ptemp[i-1]) { num[i] = num[i-1]; } else { num[i] = num[i-1]+1; } } for(i = 0; i<7; i++) { for(j = 0;j<7;j++) { if(record[0][i] == ptemp[j]) { record[1][i] = num[j]; } } } for(i = 0; i<7; i++) printf("%d ",record[0][i]); printf("\n"); for(i = 0; i<7; i++) printf("%d ",record[1][i]); getch(); return 0;}