题目描述
小李是学生会的一名干部,在招新的时候他得到了一张有n个新生的名单,但由于办公室的干部们的粗心,这张名单上出现了很多重复的信息。小李很苦恼,于是想寻求你的帮助,帮他把这个名单按照原来的顺序(若遇到重复的信息,只要输出第一个就行,之后的就不需要输出了),留下不重复的信息。
输入
第一行包括只有一个正整数n(1≤n≤104),代表名单上有n个人。
接下来有n行,每一行包括一个学号x(保证长度为15,即∣x∣=15),一个名字y(1≤∣y∣≤10)以及一个电话号码z(∣z∣=11),具体格式见样例。
输出
第一行先输出不重复的信息个数m。
接下来m行按照题意原顺序输出即可!具体看样例。
样例输入
7
201912213501001 WangQiang 13344556678
201912213501003 WangDong 13444006681
201912213501001 WangQiang 13344556678
201912213501003 WangDong 13444006681
201912213501002 LeeJack 13300123456
201912213501001 WangQiang 13344556678
201912213501001 WangQiang 13344556678
样例输出
3
201912213501001 WangQiang 13344556678
201912213501003 WangDong 13444006681
201912213501002 LeeJack 13300123456
解析:主要方法是利用结构体,每个人的手机号是独立的~
#include <stdio.h>
struct su{char xh[20]; //学号 char mz[20]; //名字 int dh; //电话 int shi; //判断是否重复
}arr[10005];
int main()
{int n,i,s,cnt=0;while(~scanf("%d",&n)){cnt=n; //原有效人数 for(i=0;i<n;i++){arr[i].shi=1; //原假设都有效 }scanf("%s%s%d",arr[0].xh,arr[0].mz,&arr[0].dh);for(i=1;i<n;i++){scanf("%s%s%d",arr[i].xh,arr[i].mz,&arr[i].dh);for(s=0;s<i;s++){if(arr[s].dh==arr[i].dh){ //判断是否出现过 arr[i].shi=0; //赋0,表示无效 cnt--; //有效人数减减 break; }}}printf("%d\n",cnt);for(i=0;i<n;i++){if(arr[i].shi==1){printf("%s %s %d\n",arr[i].xh,arr[i].mz,arr[i].dh);}}
}return 0;
}