程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NYOJ 312 20歲生日

NYOJ 312 20歲生日

編輯:C++入門知識

20歲生日
時間限制:1000 ms  |  內存限制:65535 KB
難度:1
描述
路過這的20歲生日就要到了,他當然很開心,可是他突然想到一個問題,是不是每個人從出生開始,到達20歲生日時所經過的天數都是一樣的呢?似乎並不全都是這樣,所以他想請你幫忙計算一下他和他的幾個朋友從出生到達20歲生日所經過的總天數,讓他好來比較一下。
輸入
一個數T,後面T行每行有一個日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
輸出
T行,每行一個數,表示此人從出生到20歲生日所經過的天數。如果這個人沒有20歲生日,就輸出-1。


樣例輸入
1
1988-03-07樣例輸出 7305解題思路:先算出從出生到出生這年結束一共經過了多少天,然後加上從出生第2年到出生第19年每年的天數,最後加上20歲生日那年要經過多少天才是他的生日。   注意:(1)、如果出生這年是閏年,而20年後不是閏年,輸出-1;(2)、出生這天為出生的第0天

參考代碼:


[cpp]
#include<stdio.h>  
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
int leapyear(int x) //判斷閏年  

    if((x%4==0&&x%100!=0)||x%400==0) 
        return 1; 
    return 0; 

int count(int a,int b,int c) //判斷一年中的第幾天  

    int s=0,i; 
        if(a%4==0&&a%100!=0||a%400==0) 
    { 
       for(i=1;i<b;i++) 
         s+=m[i]; 
       if(b>2) 
               return s+c+1; //注意閏年2月是29天  
       else  
           return s+c;     
    } 
    else 
    { 
         for(i=1;i<b;i++) 
        s+=m[i]; 
         return s+c; 
    } 

int main() 

    int j,n,Y,M,D,sum,y,m,d; 
    scanf("%d",&n); 
    while(n--) 
    { 
        scanf("%d-%d-%d",&Y,&M,&D); 
        if(M==2&&D==29&&!leapyear(Y+20)) 
        { 
            printf("-1\n"); 
            continue; 
        } 
        sum=0; 
        if(leapyear(Y)) 
            sum+=366-count(Y,M,D); 
        else  
            sum+=365-count(Y,M,D); 
        j=1; 
        Y++; 
        while(j<=20) 
        { 
            if(leapyear(Y)&&j!=20) 
                sum+=366; 
            else if(!leapyear(Y)&&j!=20) 
                sum+=365; 
            else if(j==20) 
                sum+=count(Y,M,D); 
            Y++; 
            j++; 
        } 
        printf("%d\n",sum);      
    } 
    return 0; 

#include<stdio.h>
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int leapyear(int x) //判斷閏年
{
 if((x%4==0&&x%100!=0)||x%400==0)
  return 1;
 return 0;
}
int count(int a,int b,int c) //判斷一年中的第幾天
{
 int s=0,i;
        if(a%4==0&&a%100!=0||a%400==0)
 {
    for(i=1;i<b;i++)
   s+=m[i];
    if(b>2)
               return s+c+1; //注意閏年2月是29天
    else
        return s+c;  
 }
 else
 {
      for(i=1;i<b;i++)
  s+=m[i];
      return s+c;
 }
}
int main()
{
 int j,n,Y,M,D,sum,y,m,d;
 scanf("%d",&n);
 while(n--)
 {
  scanf("%d-%d-%d",&Y,&M,&D);
  if(M==2&&D==29&&!leapyear(Y+20))
  {
   printf("-1\n");
   continue;
  }
  sum=0;
  if(leapyear(Y))
   sum+=366-count(Y,M,D);
  else
   sum+=365-count(Y,M,D);
  j=1;
  Y++;
  while(j<=20)
  {
   if(leapyear(Y)&&j!=20)
    sum+=366;
   else if(!leapyear(Y)&&j!=20)
    sum+=365;
   else if(j==20)
    sum+=count(Y,M,D);
   Y++;
   j++;
  }
  printf("%d\n",sum);    
 }
 return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved