当前位置: 代码迷 >> 综合 >> ZCMU--5120: 名单(C语言)
  详细解决方案

ZCMU--5120: 名单(C语言)

热度:91   发布时间:2023-12-06 10:14:03.0

题目描述

小李是学生会的一名干部,在招新的时候他得到了一张有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;
}