本题要求实现一个函数sumday,可计算输入的日期是这年中的第几天。
函数接口定义:
int sumday(int year,int month,int day);
小贴士:这题有复杂做法,也有简单做法,关键是因为思路不同,算法不同,代码是顺着你的算法走的,代码是算法步骤的翻译,因此复杂的不是代码问题,是你的算法设计问题。
简单的做法:需要借助数组这种存储结构。一年只有365天和366天两种,区别就是平年2月28天,闰年2月是29天。因此把12个月的天数,用数组保存下来,2月存28天。如果判断year那一年是闰年,就把数组对应的2月改为29天,其他月不变。接下来用一个单循环来循环把每个月天数加起来,直到加到month对应的月。
这题的设计思路体现了算法+数据结构的理念。我的算法借助了数组这种存储结构,二者配合得到好的设计
裁判测试程序样例:才能落地生成好的代码。
#include<stdio.h>
int sumday(int year,int month,int day);
int main()
{
int year,month,day,days;
scanf("%d/%d/%d",&year,&month,&day);
days=sumday(year,month,day);
printf("%d",days);
return 0;
}
/* 请在这里填写答案 */
答案
int sumday(int year,int month,int day)
{
int a[13],b[13],i,rq=0;
{a[1]=31;a[2]=28;a[3]=31;a[4]=30;a[5]=31;a[6]=30;a[7]=31;a[8]=31;a[9]=30;a[10]=31;a[11]=30;a[12]=31;}
{b[1]=31;b[2]=29;b[3]=31;b[4]=30;b[5]=31;b[6]=30;b[7]=31;b[8]=31;b[9]=30;b[10]=31;b[11]=30;b[12]=31;}
if((year%4==0 && year%100!=0)||year%400==0)
{
for(i=1;i<month;i++)
rq+=b[i];
}
else
{
for(i=1;i<month;i++)
rq+=a[i];
}
rq=rq+day;
return rq;
}