7-14 然后是幾點 (15 分)
題目來自https://pintia.cn/
有時候人們用四位數字表示一個時間,比如 1106
表示 11 點零 6 分。現在,你的程序要根據起始時間和流逝的時間計算出終止時間。
讀入兩個數字,第一個數字以這樣的四位數字表示當前時間,第二個數字表示分鍾數,計算當前時間經過那么多分鍾后是幾點,結果也表示為四位數字。當小時為個位數時,沒有前導的零,例如 5 點 30 分表示為 530
;0 點 30 分表示為 030
。注意,第二個數字表示的分鍾數可能超過 60,也可能是負數。
輸入格式:
輸入在一行中給出 2 個整數,分別是四位數字表示的起始時間、以及流逝的分鍾數,其間以空格分隔。注意:在起始時間中,當小時為個位數時,沒有前導的零,即 5 點 30 分表示為 530
;0 點 30 分表示為 030
。流逝的分鍾數可能超過 60,也可能是負數。
輸出格式:
輸出不多於四位數字表示的終止時間,當小時為個位數時,沒有前導的零。題目保證起始時間和終止時間在同一天內。
輸入樣例:
1120 110
結尾無空行
輸出樣例:
1310
結尾無空行
答案1(錯誤):
沒有考慮很多,直接寫的結果。。。
#include<stdio.h>
int main(){
int startTime,through;
scanf("%d %d",&startTime,&through);
int h = startTime / 100;
int m = startTime % 100;
if(h + through / 60 < 24 && h + through / 60 >=0 && (h + through / 60 + (m + through % 60) / 60)*100+(m + through % 60) % 60 >= 0){
if(h + through / 60 + (m + through % 60) / 60 < 10){
printf("%03d",(h + through / 60 + (m + through % 60) / 60)*100+(m + through % 60) % 60);
}else{
printf("%04d",(h + through / 60 + (m + through % 60) / 60)*100+(m + through % 60) % 60);
}
}else{
printf("error");
}
return 0;
}
答案2(正確):
億點點修改
#include<stdio.h>
int main(){
int start,past,hour1,mins1,hour2,mins2,hour,mins;
scanf("%d %d",&start,&past);
hour1 = start / 100;//起始時間的小時
mins1 = start % 100;//起始時間的分鍾
hour2 = past / 60;//流逝時間的小時
mins2 = past % 60;//流逝時間的分鍾
hour = hour1 + hour2 + (mins1 + mins2) / 60;//終止時間的小時,分鍾和大於60,小時+1
mins = (mins1 + mins2) % 60;//終止時間的分鍾
if(past >= 0 && hour >=0 && hour < 24){//1.考慮流逝時間大於0的情況;2.保證起始時間和終止時間在同一天內
printf("%d%02d",hour,mins);//小時和分鍾分開輸出,不必考慮小時為個位數的情況
}else{//考慮流逝時間小於0的情況
printf("%d%02d",hour-1,mins + 60);//小時-1,分鍾+60,變負為正
}
return 0;
}