<PAT> 7-2 然後是幾點
基礎程式設計題目集 – 然後是幾點
有時候人們用四位數字表示一個時間,比如 1106 表示 11 點零 6 分。現在,你的程式要根據起始時間和流逝的時間計算出終止時間。
讀入兩個數字,第一個數字以這樣的四位數字表示當前時間,第二個數字表示分鐘數,計算當前時間經過那麼多分鐘後是幾點,結果也表示為四位數字。當小時為個位數時,沒有前導的零,例如 5 點 30 分表示為 530;0 點 30 分表示為 030。注意,第二個數字表示的分鐘數可能超過 60,也可能是負數。
輸入格式:
輸入在一行中給出 2 個整數,分別是四位數字表示的起始時間、以及流逝的分鐘數,其間以空格分隔。注意:在起始時間中,當小時為個位數時,沒有前導的零,即 5 點 30 分表示為 530;0 點 30 分表示為 030。流逝的分鐘數可能超過 60,也可能是負數。
輸出四位數字表示的終止時間,當小時為個位數時,沒有前導的零。題目保證起始時間和終止時間在同一天內。
輸入樣例:
1120 110
輸出樣例:
1310
這道題主要是最後一個測試點的問題,我因為公式搞錯了,想了很久。
首先要分類,分鐘分為正數和負數討論,然後就是輸出前面是否有零的加入,一共四種情況。
來想到輸入樣例與輸出結果:
1120 110 -->1310 這組是正數最普通的一組
120 -70 -->010 這組是前面小時是零的情況
220 -70 -->110 這組是負數最普通的一組
以下是我寫的程式碼比較囉嗦,在網路搜尋中也看到了別的方法,一起記錄下來。
#include <stdio.h>
int main()
{
//輸入開始時間
int starttime;
scanf("%d",&starttime);
//第二個數:分鐘數(正數,負數) 新儲存數
int minute;
int input;
int save1,save2;
scanf("%d",&minute);
if (minute>=0)
{
save1 = minute/60; //幾個小時
save2 = minute% 60; //剩下的幾分鐘
input = starttime+ save1*100+save2;
if (input/10%10 >= 6)
{
input = input +40;
}
}
else if (minute < 0)
{
save1 = (-minute)/60; //幾個小時
save2 = (-minute)%60; //剩下的幾分鐘
input = starttime- save1*100-save2;
if (input/10%10 >= 6)
{
input = input -40;
}
}
//看輸出input
if (input <60)
{
printf("0%d",input);
}
else if (input >= 60)
{
printf("%d",input);
}
return 0;
}
解釋:我是採用將分鐘數轉換為小時與起始時間做加法,分類討論分鐘數進行計算。
比如1120 與110 這個例子,輸出的結構就是1270,如果大於十位數大於6,就要將1270 +100 -60就是input+40。同理舉例220 -30 就應該是190,十位數大於6,就要190 -40分鐘。
還有一種做法就是將輸入結果換成分鐘數,下面也是我的例子。
#include <stdio.h>
int main()
{
//輸入開始時間,與分鐘數
int starttime,input_minute;
scanf("%d %d",&starttime,&input_minute);
//開始時間轉換為分鐘
int minute=0,out_minute=0;
minute = starttime/100*60 + starttime%100;
out_minute = input_minute + minute;
//將輸出分鐘轉化為小時
int out_time;
out_time = out_minute/60*100+out_minute%60;
printf("%03d",out_time);
return 0;
}
感謝大家觀看~~~~