HDU 1201 18歲生日

來源:互聯網
上載者:User

這題最有意思的是:如果生日不存在就輸出-1。

生日不存在:

1、輸入資料的不符合要求。比如時間小於0、月份大於12、天數大於31、月份和該月天數不相稱等。

2、出生是的時間是閏年的2/29,可是18年後的那一年不是閏年。

 

AC代碼:

#include<iostream>using namespace std;bool judgeLoopYear(int year)    //判斷是否是閏年{if((year%4==0 && year%100!=0) || year%400==0)return true;return false;}bool judgeMonthDay(int year,int month,int day)  //輔助判斷輸入的資料是否正確{switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(day<=31 && day>0) return true;case 2:if((judgeLoopYear(year) && day<=29 && day>0) || (!(judgeLoopYear(year) && day<=28 && day>0)))return true;case 4:case 6:case 9:case 11:if(day<=30 && day>0) return true;}return false;}bool judgeInputCorrect(int year,int month,int day)   //判斷輸入的資料格式是否正確{if(year<0 || month>12 || month<=0 || day>31 || day<=0 || !judgeMonthDay(year,month,day))return false;return true;}int knowDay(int year,int month)   //根據某一年得到該年某一月份的天數{switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 2:if((judgeLoopYear(year)))return 29;else return 28;case 4:case 6:case 9:case 11:return 30;}}int count(int year,int month,int day)   //計算{int i,num=0;num+=knowDay(year,month)-day;for(i=month+1;i<=12;i++){num+=knowDay(year,i);}for(i=1;i<=17;i++){if(judgeLoopYear(year+i))num+=366;elsenum+=365;}for(i=1;i<month;i++){num+=knowDay(year+18,i);}num+=day;return num;}bool no18Birthday(int year,int month,int day)  //出生是閏年,18年後不是閏年,無生日{if(month==2 && day==29 && judgeLoopYear(year+18)==false)return false;return true;}int main(){int year,month,day,cas;    cin>>cas;while(cas--){scanf("%d-%d-%d",&year,&month,&day);if(judgeInputCorrect(year,month,day)==false || no18Birthday(year,month,day)==false){cout<<-1<<endl;continue;}cout<<count(year,month,day)<<endl;}return 0;}

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.