每日刷题(二十四)
蓝桥杯第八届C语言B组省赛习题
习题G:日期问题
这个题难度还是不大的,大家可能卡就在如何解析输入数据,这里我是将输入的数据输入一个数组,然后再将数组解剖成三块分给其他三个变量,这个题还考查了闰年以及月份所对应的天数的计算。
详细C代码如下
#include<stdio.h>
int leapyear(int year)
{
if(year % 4 == 0 && year % 100 != 0)
return 1;
else if(year % 400 == 0)
return 1;
else
return 0;
}
int days(int month, int year)
{
if(month == 2)
if(leapyear(year))
return 29;
else
return 28;
else if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
return 31;
else
return 30;
}
int main()
{
char string[8];
scanf("%s",string);
int a, b, c;
a = (string[0] - '0') * 10 + (string[1] - '0');
b = (string[3] - '0') * 10 + (string[4] - '0');
c = (string[6] - '0') * 10 + (string[7] - '0');
//可能性一:年/月/日
if(a >= 60) //先处理年
a += 1900;
else
a += 2000;
if(b <= 12 && b >= 1)
if(c <= days(b,a) && c >= 1)
{
printf("%d-%02d-%02d\n",a, b, c);
}
a = (string[0] - '0') * 10 + (string[1] - '0');
b = (string[3] - '0') * 10 + (string[4] - '0');
c = (string[6] - '0') * 10 + (string[7] - '0');
//可能性二:月/日/年
if(c >= 60)
c += 1900;
else
c += 2000;
if(a <= 12 && a >= 1)
if(b <= days(a,c) && b >= 1)
{
printf("%d-%02d-%02d\n",c, a, b);
}
a = (string[0] - '0') * 10 + (string[1] - '0');
b = (string[3] - '0') * 10 + (string[4] - '0');
c = (string[6] - '0') * 10 + (string[7] - '0');
//可能性三:日/月/年
if(c >= 60)
c += 1900;
else
c += 2000;
if(b <= 12 && b >= 1)
if(a <= days(b, c) && a >= 1)
printf("%d-%02d-%02d\n",c, b, a);
return 0;
}
经过验证,没问题
如果想看是否超出资源约定,可以试着加入以下元素
#include <time.h> 头文件
double start,finish; 变量
程序运行时间,在程序开始处用start=(double) clock(); 获得开始时间
在程序结束处用finish=(double)clock(); 获得结束时间
然后输出时间差 毫秒 数:
printf("%.4f ms",finish-start);
要查看内存使用情况可以在任务管理器中查看
我这个代码都是在资源约定以内的