HDUOJ 1201 18歲生日(判斷閏年)
阿新 • • 發佈:2019-02-19
HDUOJ 1201 18歲生日
18歲生日
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 23412 Accepted Submission(s): 7495
Problem Description Gardon的18歲生日就要到了,他當然很開心,可是他突然想到一個問題,是不是每個人從出生開始,到達18歲生日時所經過的天數都是一樣的呢?似乎並不全都是這樣,所以他想請你幫忙計算一下他和他的幾個朋友從出生到達18歲生日所經過的總天數,讓他好來比較一下。
Input 一個數T,後面T行每行有一個日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
Output T行,每行一個數,表示此人從出生到18歲生日所經過的天數。如果這個人沒有18歲生日,就輸出-1。
Sample Input 1 1988-03-07
Sample Output 6574 My solution:
#include<stdio.h> int dijitian(int year,int month,int day) /*判斷這個日期是該年的第幾天*/ { int i,sum=0; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //scanf("%d%d%d",&year,&month,&day); if(year%4==0&&year%100!=0||year%400==0) a[2]+=1; for(i=1;i<month;++i) sum+=a[i]; sum+=day; a[2]+=1; return sum; } int runnian(int year)/*判斷是不是閏年*/ { if(year%4==0&&year%100!=0||year%400==0) return 1; else return 0; } int main() { int year1,month1,day1,i,j,t1,k,t2,sum=0,n; //int dijitian(int year,int month,int day);/*這裡不用宣告*/ //int runnian(int year); scanf("%d",&n); for(k=0;k<n;k++) { sum=0; scanf("%d-%d-%d",&year1,&month1,&day1); if(month1==2&&day1==29)/*判斷輸入的日期是不是閏年的2月29號,若是,則輸出-1,因為第18年肯定不是閏年,18%4=2*/ { // j=runnian(year1+18); // if(j==0) // { // printf("-1\n"); // goto loop; // } continue;/*結束本次迴圈,執行下一次迴圈,因為不熟悉,所以用的是上面的做法,太麻煩了,用goto語句跳到本次*/ } /*迴圈的結尾處,從而繼續執行下一次迴圈*/ t1=dijitian(year1,month1,day1); t2=dijitian(year1+18,month1,day1); for(i=year1;i<year1+18;++i) { j=runnian(i); if(j) sum+=366; else sum+=365; } sum+=(t2-t1); printf("%d\n",sum); //loop: ; } return 0; }