#include<stdio.h>
struct data //该结构体存储输入的年月日
{
int y;
int m;
int d;
};
struct y_equals //该结构体用于存储年从小到大后相同年份的开始下标和结束下标
{
int head;
int end;
};
int main()
{
int o=0;
int z=1;
int p,q;
int equals;
int head,end;
int ye=0; //表示有多少种相同的年份
struct y_equals y_e[50]={0}; //该结构体数组用于存储有多少种相同的年份,比如1999,1999,2000,2000,就有两种相同的年份
int b[50]={0},bb=0;
struct data k;
int j=0,i,m;
struct data a[100];
while(~scanf("%d%*c%d%*c%d",&a[j].m,&a[j].d,&a[j].y))j++;
for(i=0;i<j-1;i++) //首先将年份从小到大排列
{
for(m=i+1;m<j;m++)
{
if(a[m].y<a[i].y)
{
k=a[m];
a[m]=a[i];
a[i]=k;
}
}
}
equals=a[0].y;
for(i=1;i<j;i++) //判断有几组相同的年份,并将开始和结束的下标保存到结构体中
{
if(a[i].y==equals)
{
o=1; //把1赋值给o表示有相同的年份,
if(z==1) //z为1时,y_e开始接纳第一个相同年份的下标
y_e[ye].head=i-1,z=0; //把0赋值给z,说明即便后面的年份相同并且不会改变第一个相同年份的下标
if(i==j-1 && z==0) //当i为最后一组年月日并且z为0,即可能所有的年份都相同,这是就要把i赋值给y_e[ye].end,否则end没有赋值就会出错
{
ye+=1;
y_e[ye].end=i; //因为复制任务都是判断到年份与前一个年份不相同的时候再把该年份的下标赋值给end,该if语句用来防止输入的年份全相同时end没有赋值,引发错误
}
}
else
{
if(o==1) //o等于1表示前面有过相同的年份,o表示0则表示前面没有一个年份相同
{
o=0;
y_e[ye++].end=i-1;
equals=a[i].y; z=1; //说明年份不相同,把1赋值给z,这样就可以将新的年份输入到结构体y_e中
}
else
{ equals=a[i].y; z=1;}
}
}
for(i=0;i<ye;i++) //根据相同的年数的种类个数按照相同的年数的月份从小到大排列
{
for(p=y_e[i].head;p<=y_e[i].end-1;p++)
{
for(q=p+1;q<=y_e[i].end;q++)
{
if(a[p].m>a[q].m)
{
k=a[p];
a[p]=a[q];
a[q]=k;
}
}
}
}
//以下就是年份和月份都排好序了,最后再给天数排序,在排序的时候要注意年份和月份都要相同
head=0;
for(i=1;i<j;i++)
{
if(a[i].y==a[head].y && a[head].m==a[i].m && i<j-1)
continue;
else
{
for(p=head;p<i-1;p++)
{
for(q=p+1;q<=i-1;q++)
{
if(a[p].d>a[q].d)
{
k=a[p];
a[p]=a[q];
a[q]=k;
}
}
}
head=i;
}
}
for(i=0;i<j;i++)
{
if(a[i].m/10==0)
printf("0%d/%d/%d\n",a[i].m,a[i].d,a[i].y);
else
printf("%d/%d/%d\n",a[i].m,a[i].d,a[i].y);
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复