OpenJudge - 6377:生日相同 2.0

描述

在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。

输入

第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。名字、月、日之间用一个空格分隔

输出

每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。 对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。如没有生日相同的学生,输出”None”

样例输入

6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2

样例输出

3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange

思路

这是大一上学期学c语言时ac的一道题,恰逢这个季节,感觉不能再颓废下去,偶然发现了他,于是整理一下,发表出来,看了好久才看明白以前的代码,结构体排序,如果有同一天,先输出生日,记录同一天学生的数量,再挨个判断输出名字。代码如下:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 185
using namespace std;
struct ccc
{
	char name[N];
	int mouth;
	int day;
}student[N];
bool com(ccc a,ccc b)//排序,日期从小到大输出
{
	if(a.mouth==b.mouth)
	{
		return a.day<b.day;
	} 
	else return a.mouth<b.mouth;
}
int main()
{
	int n;
	while(scanf("%d ",&n)!=EOF)
	{
		char tmp[N][N];int sum=0,x=0;
		for(int i=0;i<n;i++)
		{
			scanf("%s %d%d",&student[i].name,&student[i].mouth,&student[i].day); 
		}
		sort(student,student+n,com);
		for(int i=0;i<n-1;i++)
		{
			while(student[i].day==student[i+1].day)//生日相同记录数量
			{
				strcpy(tmp[i],student[i].name);
				strcpy(tmp[i+1],student[i+1].name);
				sum++;i++;
			}
			if(sum>=1)//如果生日相同
			{
				x=1;
				printf("%d %d ",student[i].mouth,student[i].day);
				int a[N]={0};//学生名字长度
				int min=1000;
				for(int j=i-sum;j<i+1;j++)
				{
					a[j]=strlen(tmp[j]);
				}
				int m=sum+1,t;
				while(m>0)//每次找到最小的名字输出
				{
					for(int j=i-sum;j<i+1;j++)
					{
						if(a[j]<min)//长度最小
						{
							min=a[j];t=j;
						}
						else if(a[j]==min)
						{
							if(strcmp(tmp[j],tmp[t])<0)//字典序最小
							{
								t=j;
							}
						}
						if(j==i)
						{
							a[t]=1000;
						}
					}
					
					if(m==1)
					{
						printf("%s\n",tmp[t]);
						sum=0;
					}
					else printf("%s ",tmp[t]);
					m--;min=1000;
				}
			}
		}
		if(x==0)
		{
			printf("None");
		}
	}
	return 0;
}
发布了28 篇原创文章 · 获赞 40 · 访问量 3454

猜你喜欢

转载自blog.csdn.net/weixin_43912621/article/details/104307575