題幹
題目描述
輸入 2 個整數time1 和time2,表示火車的出發時間和到達時間,計算並輸出旅途時間。
有效的時間範圍是 0000 到2359,不需要考慮出發時間晚於到達時間的情況。
輸入
輸入只有兩個整數
輸出
求出火車的旅途時間
樣例輸入
712
1411
樣例輸出
The train journey time is 6 hrs 59 mins.
源代碼
#include<stdio.h>
int main()
{
int time1,time2; //這裏定義的變量有點多,故分成了兩行寫
int h1,m1,h2,m2,h3,m3,lm;
scanf("%d%d",&time1,&time2); //寫入time1,time2;
h1=time1/100; //這裏有一個小技巧,就是如何取任意位數上的數,因爲h1是一個整型變量,
//只能保存整數,即小數點前的數,如:time1輸入321,則h1=3而不是3.21
m1=time1%100; //這裏"%"意爲"取模",只有整數可以取模,得出的值是餘數,
//這一排的意思是把time1取模100的值賦給m1
//取模後的值爲time1中的數除100後的餘數,如:321%100=21,321%2=1
h2=time2/100; //time除100(time/100)即把小時提取出來(看不懂的話看題乾的題意)
m2=time2%100; //time取模100(time%100)即把分鐘提取出來
if(h2<=23) // 下面這兩個if判斷輸入的time是否不符合時間的寫法,如:24點61分(就這個意思)
{
if(m2<=59)
{
lm=h2*60+m2-h1*60-m1; //算出時間,這是其中一個算法
h3=lm/60;
m3=lm%60;
printf("The train journey time is %d hrs %d mins.",h3,m3); //題目中要求的格式,寫錯會WA的
}
else
printf("time is wrong!"); //輸出時間錯誤
}
else
printf("time is wrong!"); //同理
return 0;
}
//ENDING
這是基本的思路
解題思路
這道題最重要的就是如何把輸入的十進制的時間轉化爲平常的六十進制的時間
下面的這種是其中的一種算法
lm=h2*60+m2-h1*60-m1;
h3=lm/60;
m3=lm%60;
這也是一種算法
h3=h2-h1;
m3=m2-m1;
if(m3<0)
{
m3=m3+60;
h3=h1-1;
}
這兩種算法都可以
第一種比較機智,第二種簡單一點,
大家比較一下兩種算法的優缺點,看看那個更適合你
也可以都研究一下,讓自己多一個choice
希望大家喜歡這道題目還有我的解題思路!!!
如有問題請留言,謝謝!!!