hdoj-1201 18歲生日【日期和時間處理】

http://acm.hdu.edu.cn/showproblem.php?pid=1201

18歲生日

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23832    Accepted Submission(s): 7632


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

 

以3月爲界   三月之前的從當前判斷是否是閏年  否則從下一年判斷是否是閏年

AC code:

#include<stdio.h>
int runnian(int y)
{
    if(y%4==0&&y%100!=0||y%400==0)
        return 1;
    else return 0;
}
int main()
{
    int t,y,m,d,i,sum;
    
    scanf("%d",&t);
    while(t--)
    {
        sum=18*365;
        scanf("%d-%d-%d",&y,&m,&d);
        if(m==2&&d==29)
        {
            printf("-1\n");
            continue;//進行下一組數據  或者把該部分寫在下面//部分  
        }
            
        if(m>=3)
        {
            for(i=1;i<=18;i++)
            {
                if(runnian(y+i))
                    sum++;
            }
        }
        else {
            for(i=0;i<18;i++)
            {
                if(runnian(y+i))
                    sum++;
            }
        } 
//        if(m==2&&d==29)
//            printf("-1\n");
//        else 
//            printf("%d\n",sum);
        printf("%d\n",sum);
    }
    return 0;
}

下面的代碼是我自己的思路  但不知缺少了哪種情況 始終不能AC    還請大神指點抓狂抓狂

#include<stdio.h>
int runnian(int x)
{
	if(x%4==0&&x%100!=0||x%400==0)
		return 1;
	else return 0;
}
int main()
{
	int t,y,m,d;
	scanf("%d",&t);
	while(t--)
	{
		int sum=18*365;
		scanf("%d-%d-%d",&y,&m,&d);
		if(runnian(y)&&m==2&&d==29)
			printf("-1\n");
		else if(runnian(y)&&(m==1||m==2&&d<29))
			printf("%d\n",sum+=5);
		else if(y%4==3)
			printf("%d\n",sum+=5);
		else if(y%4==2&&(m>=3||m==2&&d==29)) 
			printf("%d\n",sum+=5);
		else printf("%d\n",sum+=4);
	}
	return 0;
} 



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章