No.651 E869120 and Driving
はじめに
競技プログラミング、yukicoder
No.651 E869120 and Driving
言語はC#
何かあればTwitter→@pirorirori_n712まで
問題
時速100kmで移動するE869120が、午前10時に出発して、aの距離がある目的地に着く時間を求める
入力:10≦a≦1000を満たす10 の倍数a(目的地までの距離)
出力:午前10時に出発したときに目的地に着く時間
解き方
時間=距離÷速さで求められる
E869120は常に時速100kmで移動することから
hour(a/100)とminutes(a%100)に分けて計算する
*hour(a/100)
時速100km、すなわち一時間に100kmの距離をすすむので
100km=1時間となる。
a/100kmでaの中に100kmが何回あるか数えられる。
100kmの回数は100km=1時間から、そのまま
hourとなることが分かる。
もしa/100km=nであれば、かかる時間はn時間である。
*minute(a%100)
かかるminuteは必ず一時間未満であることから、
時速である100で割った余りの距離が、minuteに相当する距離であることが分かる。
この距離を速さである100km/時速で割って時間を出し、
出てきた時間はhour(60分でひとまとまり)を単位とするので
mimuteに直すために60をかける。
コード例
using System; class No651{ static void Main(string[] args){ //入力をint型に変換 var i=(Int32.Parse(Console.ReadLine())); //時間、時速である100で距離を割る var hour=(i/100)+10; //分、時速である100で割った余りが分の距離にあたる //出てきた距離を100.00で割り、 //出てきたhour単位の時間に60をかけて分に直す var minute=((i%100)/100.00)*60; //出力をする //分は一けただった場合、"00"という書式で出力したいので //string型にキャストして書式を整える Console.WriteLine($"{hour}:{minute.ToString("00")}"); } }
これを整理して
using System; class No651{ static void Main(string[] args){ //入力をint型に変換 var i=(Int32.Parse(Console.ReadLine())); //出力をする //時間、時速である100で距離を割る //分、時速である100で割った余りが分の距離にあたる //出てきた距離を100.00で割り、 //出てきたhour単位の時間に60をかけて分に直す //分は一けただった場合、"00"という書式で出力したいので //string型にキャストして書式を整える Console.WriteLine($"{(i/100)+10}:{((i%100)/100.00)*60.ToString("00")}"); } }
小数点などの書式の指定は、様々ありますが
ここではToString("00");を使っています
使い方はstring型に変換するToString()に書式を指定する引数をstring型で入れます。
この場合は一けたの数字が来ても
二けたで表示してほしいので"00"を指定しています。
これによって例えば「1」が「01」になります。