描述
北航将要举办第四届程序设计竞赛,参赛选手均通过网上报名的方式来报名。但是,有些同学可能由于报名时填错了信息,会又填一次报名表,给参赛组织者 带来了一定的麻烦。于是,参赛组织者想统计每个同学报名了多少次,以便于手工核对报名信息。
输入
本题有多组测试数据。输入的第一行为报名的个数,最多1000。接下来每行有一个学号,为北航本科生八位学号。输入数据以0结尾。
输出
对每组输入数据,按照输入数据中的学号第一次出现的顺序,输出该学号和出现的次数,用空格隔开。每 两组数据之间空一行。
样例输入
7
35211312
36211625
35211425
35211425
35211425
36211625
36211625
2
35211425
35211425
0
35211312
36211625
35211425
35211425
35211425
36211625
36211625
2
35211425
35211425
0
样例输出
35211312 1
36211625 3
35211425 3
35211425 2
解题思路:
此题是一道模拟题。第一次出现的学号记录下来,存放到一个数组中去,以后出现的学号和数组中的学号进行比较,判断次数即可。
#include<stdio.h> #include<string.h> main() { int te; int number; int i,j; char a[1000][100]; int count[1000]; scanf("%d",&number); getchar(); while(number!=0) { for(i=0;i<1000;i++) count[i]=0; for(te=0;te<number;te++) { scanf("%s",&a[te]); } for(i=0;i<number;i++) for(j=i+1;j<number;j++) if(strcmp(a[i],a[j])==0&&a[j][0]!='*'&&a[i][0]!='*') { count[i]++; a[j][0]='*'; } for(i=0;i<number;i++) { if(a[i][0]!='*') { for(j=0;a[i][j]!='\0';j++) printf("%c",a[i][j]); printf(" %d\n",count[i]+1); } } printf("\n"); scanf("%d",&number); getchar(); } }