1. 程式人生 > 其它 ><PAT> 7-2 然後是幾點

<PAT> 7-2 然後是幾點

技術標籤:PAT每日刷題c語言

基礎程式設計題目集 – 然後是幾點

有時候人們用四位數字表示一個時間,比如 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; 
}

感謝大家觀看~~~~