日期排序计算
Time Limit:1000MS Memory Limit:32768K
Description:
给定一些日期,对它们进行排序并且输出这个日期是该年的第几天。在线地址:http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1296
提交错误,但是不知道错在那,望各位指点指点
#include "stdio.h"
#include "stdlib.h"
typedef struct
{
int dd;
int mm;
int yy;
int Sumday;
}Data;
int day[2][13]={0,31,29,31,30,31,30,31,31,30,31,30,31, //每个月的天数
0,31,28,31,30,31,30,31,31,30,31,30,31};
int Leap(Data d) //判断是否为闰年
{
return ((d.yy%4==0 && d.yy%100!=0 )||d.yy%400==0);
}
void Count_days(Data *d,int n,int bol) //统计天数,如果是闰年bol为0,否则为1
{
int i,j;
for(i=0;i<n;i++)
{
d[i].Sumday=d[i].dd;
for(j=1;j<d[i].mm;j++)
d[i].Sumday+=day[bol][j];
}
}
int cmp(const void *a,const void *b) //快速排序使用函数,安年、月、日
{
Data *d1,*d2;
d1=(Data *)a; d2=(Data *)b;
if(d1->yy!=d2->yy) return d1->yy-d1->yy;
if(d1->mm!=d2->mm) return d1->mm-d2->mm;
if(d1->dd!=d2->dd) return d1->dd-d2->dd;
return 0;
}
void main()
{
int n;
while(scanf("%d",&n)!=EOF && n)
{
Data *d1=(Data *)malloc(sizeof(Data)*(n+2)); //存储闰年的日期
Data *d2=(Data *)malloc(sizeof(Data)*(n+2)); //存储非闰年的日期
Data d3; //中间变量
int i,j,k;
j=k=0;
for(i=0;i<n;i++)
{
scanf("%d%*c%d%*c%d",&d3.dd,&d3.mm,&d3.yy);
if(Leap(d3)) d1[j++]=d3; //统计闰年的个数
else d2[k++]=d3; //统计非闰年个数
}
Count_days(d1,j,0);
Count_days(d2,k,1);
qsort(d1,j,sizeof(d1[0]),cmp);
qsort(d2,k,sizeof(d2[0]),cmp);
if(j>0)
{
for(i=0;i<j;i++)
printf("%02d\\%02d\\%04d %d\n",d1[i].dd,d1[i].mm,d1[i].yy,d1[i].Sumday);
printf("\n");
}
for(i=0;i<k;i++)
printf("%02d/%02d/%04d %d\n",d2[i].dd,d2[i].mm,d2[i].yy,d2[i].Sumday);
printf("\n");
}
}