星系炸彈(2015年藍橋杯省賽第2題)
阿新 • • 發佈:2019-02-15
/*
在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);
}
}
在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);
}
}