1. 程式人生 > >小明學長回學校

小明學長回學校

題目描述

在未來的某一天,小明學長躺在他XXX平米的別墅裡喝著龍井,突然一種莫名其妙的感覺湧上心頭:一晃這麼長的時間過去了,記得當時和隊友在331有時因為想出一道題的好的解法能興奮的喊出來,真想回去再打場比賽。於是小明學長就想約上那些老隊友一起回去看看,但是又不想開車回去,因為他比較喜歡鍛鍊,所以想騎著山地車來次長途的旅行,順便還能看看沿途的風景。現在學長準備year0-month0-day0早晨出發,和老隊友們約好year0-month1-day1晚上到達(晚上更適合回憶嘛╮( ̄▽  ̄)╭),學長想知道這次回去路上需要多少天,但是又懶得計算,所以就麻煩聰明的學弟你來幫學長算算吧。

 

輸入

第一行輸入一個整數n,表示有n組資料。
每組測試資料佔一行,分別為兩個日期,日期格式為:year-month-day,用空格隔開。具體見輸入樣例。約定兩個日期年份相同。

 

輸出

對於每組測試資料,輸出佔一行,為兩個日期之間的時間間隔,以天為單位。

 

樣例輸入

2
2018-10-27 2018-10-30
2018-11-1 2018-11-11

 

樣例輸出

4
11

解題思路:

1:先判斷是否在同一個月,是,直接day1-day0就可以得答案,不是往下

2:t=day1,

3:判斷(month0+1)<month1是進入迴圈,不是往下

4:month0的剩餘天數加上t就得答案。

 

 

#include<iostream>
#include<string>
#include<ctime>
using namespace std;
int main()
{
	int n;                       //n組資料 
	cin>>n;
	int year0,month0,day0;
    int year1,month1,day1;
	char ch1,ch2;           //字元“-”。 
	char ch3,ch4;
	int t=0,l;
	int a;
    while(n--)               
    {
    t=0;
	cin>>year0>>ch1>>month0>>ch2>>day0;	
	cin>>year1>>ch3>>month1>>ch4>>day1;
    if(month0==month1)                //在同一個月 
        t=day1-day0+1;	
    else                               //不在同一個月
    {
    	t=day1;
    	l=month0+1;
    	while(l<month1)                // month1-month0>1
    	{
    	  switch(l)
	   	  {
		   	  case 2:	
		   	  if(year0%4==0&&year0%100!=0||year0%400==0)
			  {
			  	 t=t+29;
			  	 break;
			  } 
			  else
			  {
			  	 t=t+28;
			  	 break;
			  }	
		   	  case 3:
		   	  case 5:
		   	  case 7:
		   	  case 8:
		   	  case 10:
		   	  case 12:
				 t=t+31;
				 break;
			  case 4:
		   	  case 6:
		   	  case 9:
		   	  case 11:
				 t=t+30;
				 break; 	
	     }
		 l++;	
		}
		if(month0==1||month0==3||month0==5||month0==7||month0==8||month0==10)
          t=t+31-day0+1;               //month0所在月份 
        else if(month0==2)
         {
         	if(year0%4==0&&year0%100!=0||year0%400==0)
         	t=t+29-day0+1;
         	else
         	t=t+28-day0+1; 	
		 }
		else
		t=t+30-day0+1;   	
    }
	cout<<t;	
	}
	return 0;
	
}