比赛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();
}
14 个解决方案
#1
#2
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;
}
你这个循环,是个死循环,num++;i=0;这两句破坏了你的循环判断,i永远小于num
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;
}
你这个循环,是个死循环,num++;i=0;这两句破坏了你的循环判断,i永远小于num
#3
怎么改啊?
#4
用struct记录数据更好吧
#5
#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;
}
用笨办法写了个程序,排是排出来了,效率不高
#6
#7
题目都没说好是分越低名次越高。。。
#8
用一个链表,里面放3个元素。一个是次序,一个是分数,一个是指针域,定义3个指针,一个是头指针不需要移动。一个p1指针指向当前的结点,一个是p2指针,不停的移动,与当前结点的分数进行比较,如果比当前结点的分数小,count变量+1.这样到链尾的时候查看count,该结点的名次就是count+1.最后还得把p2=head指针,以便p1指向下一个结点的时候。p2可以从开头开始进行对比。。。
大概思路就是这样。。实现起来不算困难。。
大概思路就是这样。。实现起来不算困难。。
#9
用结构体 struct
{
int xuhao;
int defen ;
}根据得分排序,然后根据顺序打印xunhao 这样就足够了 不用那么长的程序
{
int xuhao;
int defen ;
}根据得分排序,然后根据顺序打印xunhao 这样就足够了 不用那么长的程序
#10
写个看看?
#11
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;
}
{
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;
}
#12
#13
for(i = 0; i<7; i++)最笨的数组赋值给另一个数组的方法.
{
ptemp[i] = record[0][i];
}
if(ptemp[i] == ptemp[i-1])判断当前值是否和前一个值相等,如果相等那名次相同,不等则名次值+1
{
num[i] = num[i-1];
}
else
{
num[i] = num[i-1]+1;
}
#14
大哥能上代码吗,你说的都是空话
#1
#2
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;
}
你这个循环,是个死循环,num++;i=0;这两句破坏了你的循环判断,i永远小于num
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;
}
你这个循环,是个死循环,num++;i=0;这两句破坏了你的循环判断,i永远小于num
#3
怎么改啊?
#4
用struct记录数据更好吧
#5
#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;
}
用笨办法写了个程序,排是排出来了,效率不高
#6
#7
题目都没说好是分越低名次越高。。。
#8
用一个链表,里面放3个元素。一个是次序,一个是分数,一个是指针域,定义3个指针,一个是头指针不需要移动。一个p1指针指向当前的结点,一个是p2指针,不停的移动,与当前结点的分数进行比较,如果比当前结点的分数小,count变量+1.这样到链尾的时候查看count,该结点的名次就是count+1.最后还得把p2=head指针,以便p1指向下一个结点的时候。p2可以从开头开始进行对比。。。
大概思路就是这样。。实现起来不算困难。。
大概思路就是这样。。实现起来不算困难。。
#9
用结构体 struct
{
int xuhao;
int defen ;
}根据得分排序,然后根据顺序打印xunhao 这样就足够了 不用那么长的程序
{
int xuhao;
int defen ;
}根据得分排序,然后根据顺序打印xunhao 这样就足够了 不用那么长的程序
#10
写个看看?
#11
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;
}
{
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;
}
#12
#13
for(i = 0; i<7; i++)最笨的数组赋值给另一个数组的方法.
{
ptemp[i] = record[0][i];
}
if(ptemp[i] == ptemp[i-1])判断当前值是否和前一个值相等,如果相等那名次相同,不等则名次值+1
{
num[i] = num[i-1];
}
else
{
num[i] = num[i-1]+1;
}
#14
大哥能上代码吗,你说的都是空话