标签:style blog http color strong 数据
按要求,给国家进行排名。
4 4 4 8 1 6 6 2 4 8 2 2 12 4 0 1 2 3 4 2 8 10 1 8 11 2 8 12 3 8 13 4 0 3
1:3 1:1 2:1 1:2 1:1 1:1
struct contr{ int a[3];//国家信息 double b[4];//四种排名方式所根据的数据 int c[4];//四种方式的排名 int d[2];//最终排名和排名方式 }
这里对一个国家四种方式排名时,不能单纯地改变国家顺序来排序,而是借助一维整形数组,把名次和名次所对应的国家编号映射到这个数组上。。
数组下标从1开始,记录名次;数组的值记录国家编号。
1 #include<stdio.h> 2 #define N 300 3 struct contr{ 4 int a[3];//国家信息 5 double b[4];//四种方式排名所根据的数据 6 int c[4];//四种方式的排名 7 int d[2];//最终排名和排名方式 8 }q[N]; 9 int main(int argc, char const *argv[]) 10 { 11 int n,m; 12 int i,j,k,l; 13 int x[N];//用于排名 14 int w[N];//w记录参加评选国家编号 15 int t; 16 while(scanf("%d %d",&n,&m)!=EOF) 17 { 18 for(i=0;i<n;i++) 19 for(j=0;j<3;j++) 20 scanf("%d",&q[i].a[j]); 21 for(i=0;i<m;i++) 22 scanf("%d",&w[i]); 23 24 for(i=0;i<m;i++)//初始化4种排名所根据的数据 25 { 26 q[w[i]].b[0]=(double)q[w[i]].a[0]; 27 q[w[i]].b[1]=(double)q[w[i]].a[1]; 28 q[w[i]].b[2]=q[w[i]].a[0]/(double)q[w[i]].a[2]; 29 q[w[i]].b[3]=q[w[i]].a[1]/(double)q[w[i]].a[2]; 30 } 31 for(i=0;i<4;i++)//四种排名 32 { 33 for(j=1;j<m+1;j++) 34 x[j]=j-1;//初始化排名,x[j]表示排名为j的所对应编号为j-1 35 for(k=1;k<m;k++) 36 for(l=k+1;l<m+1;l++) 37 if(q[w[x[k]]].b[i]<q[w[x[l]]].b[i]) 38 { 39 t=x[k];x[k]=x[l];x[l]=t; 40 } 41 q[w[x[1]]].c[i]=1; 42 for(j=2;j<m+1;j++) 43 if(q[w[x[j]]].b[i]!=q[w[x[j-1]]].b[i]) 44 q[w[x[j]]].c[i]=j; 45 else 46 q[w[x[j]]].c[i]=q[w[x[j-1]]].c[i]; 47 } 48 for(i=0;i<m;i++)//求出最终排名和所用排名方式 49 { 50 q[w[i]].d[0]=q[w[i]].c[0]; 51 q[w[i]].d[1]=1; 52 for(j=1;j<4;j++) 53 { 54 if(q[w[i]].d[0]>q[w[i]].c[j]) 55 { 56 q[w[i]].d[0]=q[w[i]].c[j]; 57 q[w[i]].d[1]=j+1; 58 } 59 } 60 } 61 for(i=0;i<m;i++) 62 { 63 printf("%d:%d\n",q[w[i]].d[0],q[w[i]].d[1]); 64 } 65 printf("\n"); 66 } 67 return 0; 68 }
标签:style blog http color strong 数据
原文地址:http://www.cnblogs.com/qq1029579233/p/3860818.html