1. 程式人生 > >星系炸彈(2015年藍橋杯省賽第2題)

星系炸彈(2015年藍橋杯省賽第2題)

/*
在X星系的廣袤空間中漂浮著許多X星人造“炸彈”,用來作為宇宙中的路標。
每個炸彈都可以設定多少天之後爆炸。
比如:阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日爆炸。
有一個貝塔炸彈,n年y月r日放置,定時為t天,請你計算它爆炸的準確日期並
按 yyyy-mm-dd格式輸出,? 即4位年份2位月份2位日期。比如:2015-02-19
【資料範圍】1950<=y<=2050 , 0< t < 1000
【輸入說明】
輸入為兩行,第一行為3個整數,分別表示起始時間的年、月、日,之間用空格分隔。
第二行為定時的天數。
【輸入樣例】
2015 1 1
15
【輸出樣例】
2015-01-16
*/
#include<stdio.h>struct rq
{
 int nian;
 int yue;
 int ri; 
};void qiu_jqri( struct rq * , int );//求精確日期
void qiu_det( struct rq * );//求第二天
void qiu_dy( struct rq * ); //大月
void qiu_xy( struct rq * ); //小月
void qiu_nd( struct rq * );//年底
void qiu_ey( struct rq * );//二月int main(void)
{
 struct rq riqi ;
 scanf("%d", &riqi.nian );
 scanf("%d", &riqi.yue );
 scanf("%d", &riqi.ri );
 int bzsj ;
 scanf("%d", &bzsj);
 qiu_jqri( &riqi ,bzsj);
 return 0;
}void qiu_ey( struct rq * riqi)
{
 if( riqi->ri == 28 + (riqi->nain % 4 == 0 && riqi->nain % 100 != 0 || riqi->nain % 400 == 0 ) )
 {
  riqi->yue += 1 ;
  riqi->ri = 1 ;
  return ;
 }
 riqi->ri += 1 ;
} void qiu_nd( struct rq * riqi)
{
 if( riqi->yue == 12 && riqi->ri == 31 )
 {
  riqi->nain += 1 ;
  riqi->yue = 1 ;
  riqi->ri = 1 ;
  return ;
 }
 p_ri += 1 ;
}void qiu_xy( struct rq * riqi)
{
 if( riqi->ri == 30 )
 {
  riqi->yue += 1 ;
  riqi->ri = 1 ;
  return ;
 }
 riqi->ri += 1 ;
} void qiu_dy( struct rq * riqi)
{
 if( riqi->ri == 31 )
 {
  riqi->yue += 1 ;
  riqi->ri = 1 ;
  return ;
 }
 riqi->ri += 1 ;
}void qiu_det( struct rq * riqi )
{
 switch( riqi->yue )
 {
  case 1:
  case 3: 
  case 5: 
  case 7: 
  case 8: 
  case 10:
    qiu_dy( riqi->yue , riqi->ri );
    break ;
  case 4: 
  case 6: 
  case 9: 
  case 11:
    qiu_xy( riqi->yue , riqi->ri );
    break ;
  case 12:
    qiu_nd( riqi->nain , riqi->yue , riqi->ri );
    break ;
  case 2:
     qiu_ey( riqi->nain , riqi->yue , riqi->ri );  
 }
}void qiu_jqri( struct rq * riqi , int bzsj)
{
 while( bzsj -- > 0 )
 {
  qiu_det(riqi);
 }
}