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」になります。