zoj 2420 Calendar 將結構體存在向量裡

來源:互聯網
上載者:User

題目地址 :http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1420

 思路:

一開始看這個題覺得題意簡單但不同的月份有不同的天數,有點不知怎麼方便的解決。 然後想到打表的方法,把每一天的資訊作為一個結構體,一一存在向量裡面,向量的角標是自增的,剛好就是裡2000-01-01的天數。

 注意 :

1 閏年的判斷 

2輸出格式 1-1要寫成 01-01

3 超記憶體問題  要把三個屬性值設定成 short int ,直接int會超記憶體 

4 星期問題,2000-01-01是周六  所以第n天就是 周(n+6)%7

代碼:

#include<iostream>#include<string>#include<vector>using namespace std;struct date{  short year;  short month;  short day;};bool isleap(int n){ if(n%4==0&&n%100!=0)  return 1; if(n%400==0)   return 1; return 0;}int shortmonth(int n){   if(n==2||n==4||n==6||n==9||n==11)   return 1;   else   return 0;}int main(){  int n;  string * day=new string[7];  day[0]="Monday";  day[1]="Tuesday";  day[2]="Wednesday";  day[3]="Thursday";  day[4]="Friday";  day[5]="Saturday";  day[6]="Sunday";  vector<date> v;   for(int i=2000;i<10000;i++)       for(int j=1;j<=12;j++)         for(int k=1;k<=31;k++)      {           if(j==2&&isleap(i)&&k>29) continue;           if(j==2&&(!isleap(i))&&k>28) continue;           if(shortmonth(j)&&k>30)  continue;           date today;           today.year=i;           today.month=j;           today.day=k;           v.push_back(today);        }  while(cin>>n)  {     if(n==-1)  break;     cout<<v[n].year<<"-";     if(v[n].month<10)     cout<<"0";     cout<<v[n].month<<"-";     if(v[n].day<10)     cout<<"0";     cout<<v[n].day<<" ";     cout<<day[(n+5)%7]<<endl;  }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.