蛤玮的妹子要过生日了,经过千挑万选,蛤玮决定给妹子买一盒水彩铅笔,然而卖多少个才合适呢.机智的蛤玮决定数一数今天是妹子出生的第多少天,然后就买那么多根铅笔.
给出蛤玮妹子的生日和今天的日期,求蛤玮一共需要买多少.
注意:生日当天算第0天.
158
就是判断活了多少天的问题,这题挺坑,要说省赛的时候出的话,真有可能会特别费时,还是基础,要打牢,最近都忘的差不多了,还有,判断是否是闰年的地方需要优化,不优化的话代码会超时。
//假设开头那年为n,当前年为m,计算从计算从n年到m年经过了多少天,先计算出从n年到m-1年经过了多少天数,
//然后减去第n年过去的天数,最后再加上当前年m过去的天数,题目中最坑的就是对闰年的判断
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<math.h>
using
namespace
std;
int
aa[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
inline
int
is(
int
i)
///判断是否是闰年
{
if
((i%4 == 0 && i % 100 != 0)||(i % 400 == 0))
return
1;
return
0;
}
int
main()
{
int
a,b,c,x,y,z,T;
scanf
(
"%d"
,&T);
while
(T --)
{
scanf
(
"%d%d%d%d%d%d"
,&a,&b,&c,&x,&y,&z);
int
sum;
sum = (x - a) * 365;
///a年~x-1年中活的总天数
for
(
int
i = a; i < x;)
///a年~x-1年
if
(is(i))
///是闰年的话,加1
++ sum,i += 4;
else
i ++;
///判断a年输入的数据之前共有几天,放到t里面
int
t = c;
for
(
int
i = 1; i < b; i ++)
t += aa[i];
if
(is(a) && b > 2)
///若是闰年,且月份大于2,则t加1
t ++;
sum -= t;
///减去第a年过去的天数
///判断x年的已经过去的天数,思想同上
t = z;
for
(
int
i = 1; i < y; i ++)
t += aa[i];
if
(is(x) && y > 2)
t ++;
sum += t;
///加上这一年已经过去的天数
printf
(
"%d\n"
,sum);
///输出
}
return
0;
}
上面的用inline,下面的不用,把调用语句都改为主函数中判断