#include<stdio.h> struct Yq { char a[10]; int b; int c; int d; int e; }; struct Yq m[100]; struct Yq q1[81]; struct Yq q2[81]; struct Yq q3[81]; int main() { struct Yq temp1; struct Yq temp2; struct Yq temp3; int n1; scanf("%d",&n1); getchar(); for(int i=0;i<n1;i++) { scanf("%s %d%d%d%d",m[i].a,&m[i].b,&m[i].c,&m[i].d,&m[i].e); getchar(); } int n2; scanf("%d",&n2); getchar(); for(int i=n1;i<n1+n2;i++) { scanf("%s %d%d%d%d",m[i].a,&m[i].b,&m[i].c,&m[i].d,&m[i].e); getchar(); } int n3; scanf("%d",&n3); getchar(); for(int i=n1+n2;i<n1+n2+n3;i++) { scanf("%s %d%d%d%d",m[i].a,&m[i].b,&m[i].c,&m[i].d,&m[i].e); getchar(); } int number[3]={0}; int r[9]={0}; for(int i=0;i<n1+n2+n3;i++) { if(m[i].a[0]=='s') { q1[number[0]]=m[i]; r[0]=r[0]+m[i].c; r[1]=r[1]+m[i].d; r[2]=r[2]+m[i].e; number[0]++; } else if(m[i].a[0]=='j') { q2[number[1]]=m[i]; r[3]=r[3]+m[i].c; r[4]=r[4]+m[i].d; r[5]=r[5]+m[i].e; number[1]++; } else if(m[i].a[0]=='l') { q3[number[2]]=m[i]; r[6]=r[6]+m[i].c; r[7]=r[7]+m[i].d; r[8]=r[8]+m[i].e; number[2]++; } } for(int i=0;i<number[0]-1;i++) { for(int j=1;j<number[0];j++) { if(q1[i].a[4]>q1[j].a[4]) { temp1=q1[i];q1[i]=q1[j];q1[j]=temp1; } else if(q1[i].a[4]==q1[j].a[4] && q1[i].b>q1[j].b) { temp1=q1[i];q1[i]=q1[j];q1[j]=temp1; } } } for(int i=0;i<number[1]-1;i++) { for(int j=1;j<number[1];j++) { if(q2[i].a[2]>q2[j].a[2]) { temp2=q2[i];q2[i]=q2[j];q2[j]=temp2; } else if(q2[i].a[2]==q2[j].a[2] && q2[i].b>q2[j].b) { temp2=q2[i];q2[i]=q2[j];q2[j]=temp2; } } } for(int i=0;i<number[2]-1;i++) { for(int j=1;j<number[2];j++) { if(q3[i].a[3]>q3[j].a[3]) { temp3=q3[i];q3[i]=q3[j];q3[j]=temp3; } else if(q3[i].a[3]==q3[j].a[3] && q3[i].b>q3[j].b) { temp3=q3[i];q3[i]=q3[j];q3[j]=temp3; } } } printf("%d %d %d %d\n",number[0],r[0],r[1],r[2]); for(int i=0;i<number[0];i++) { printf("%s %d %d %d %d\n",q1[i].a,q1[i].b,q1[i].c,q1[i].d,q1[i].e); } printf("%d %d %d %d\n",number[1],r[3],r[4],r[5]); for(int i=0;i<number[1];i++) { printf("%s %d %d %d %d\n",q2[i].a,q2[i].b,q2[i].c,q2[i].d,q2[i].e); } printf("%d %d %d %d\n",number[2],r[6],r[7],r[8]); for(int i=0;i<number[2];i++) { printf("%s %d %d %d %d",q3[i].a,q3[i].b,q3[i].c,q3[i].d,q3[i].e); if(i<number[2]-1) printf("\n"); } return 0; }
时间: 2023-08-31 14:06:18 浏览: 147
<stdioh>常用函数-函数与指针
这段代码是一个简单的结构体排序程序,输入包括三部分数据,每部分数据包括若干行,每行为一组结构体,包括五个字段,分别为字符串、整数、整数、整数、整数。对于每部分数据,需要将其按照特定的规则排序,并输出排序后的结果及一些统计信息。
代码的主要逻辑如下:
1. 定义结构体 `Yq`,包含五个字段:字符串 `a`、整数 `b`、整数 `c`、整数 `d`、整数 `e`。
2. 定义结构体数组 `m`,大小为 100,用于存储所有输入的结构体数据。同时,定义三个结构体数组 `q1`、`q2`、`q3`,大小为 81,用于存储三部分数据排序后的结果。
3. 通过循环依次读入每部分数据,将其存储到结构体数组 `m` 中,并记录每部分数据的数量。
4. 定义数组 `number`,大小为 3,用于记录每部分数据的数量。同时,定义数组 `r`,大小为 9,用于记录每部分数据的统计信息。
5. 通过循环遍历结构体数组 `m`,将每个结构体按照其第一个字段的首字母进行分类,并将其存储到对应的结构体数组中。同时,更新数组 `r` 的值。
6. 分别对三个结构体数组进行排序,排序规则分别为:按照第一个字段的第五个字符升序排序(如果相同,则按照第二个字段升序排序);按照第一个字段的第三个字符升序排序(如果相同,则按照第二个字段升序排序);按照第一个字段的第四个字符升序排序(如果相同,则按照第二个字段升序排序)。
7. 分别输出每部分数据的数量和统计信息,以及排序后的结果。
这段代码的问题在于,缺少注释和变量名的解释,不易理解。同时,排序部分的代码实现比较冗长,可以考虑使用 C++ 中的 `std::sort` 函数进行简化。
阅读全文