昵称不能为空


私信TA

用户名:uq_22402921153

访问量:661

签 名:

等  级
排  名 1182
经  验 2989
参赛次数 0
文章发表 3
年  龄 20
在职情况 学生
学  校
专  业

  自我简介:

#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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区