杭電acm----1201 18歲生日
阿新 • • 發佈:2019-02-13
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1201
解題思路:
首先判斷有沒有18歲生日:
*****當你輸入的月份是2,日期為29,代表你出生的就是閏年,你只要判斷18年後是不是閏年就好了,若不是閏年,代表沒有18歲生日,反之,則有。
若有18歲生日,算從出生到18歲生日所佔的天數。
*****從出生那年1月1日開始算,到18歲那年的1月1日所佔的天數,再加上你18歲那年從1月1日到你生日的天數,再減去你出生那年從1月1日到你出生所佔的天數
#include <iostream> using namespace std; int type(int y) { if (y%4 != 0 || (y%100==0&&y%400 !=0)) return 0; else return 1; } int main() { int n,y,m,d,i,years,month,j,s,k,x; int days[2][13] = {0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31}; int year[2]={365,366}; cin>>n; while(n--) { x=years=month=0; scanf("%d-%d-%d",&y,&m,&d); k=y+18; if(type(k)==0&&m==2&&d==29) { cout<<"-1"<<endl; } else { for(i=y;i<k;i++) { years+=year[type(i)]; } for(j=1;j<m;j++) { if(type(y)==0) x+=days[0][j]; else x+=days[1][j]; if(type(k)==0) month+=days[0][j]; else month+=days[1][j]; } s=years+month-x; cout<<s<<endl; } } return 0; }