寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

C言語によるビデオテープの録画可能時間

C言語によるビデオテープの録画可能時間です。
カウンタ値の入力から、2通りの録画可能時間を求め、時:分:秒の形式で出力するプログラムです。

・問題
 標準録画で 120 分のビデオテープがあります。
 テープを完全に巻き戻した状態でビデオデッキのカウンタを 00:00:00 にし、標準録画モードで録画したところ、あるカウンタ値になりました。
 このカウンタ値(時、分、秒)を入力し、残りのテープの長さ(録画可能時間)を求め、時:分:秒の形式で出力するプログラムを作成して下さい。
 ただし、2 時間(120分)以内の入力とします。
 なお、テープ残量は標準録画モードと 3 倍録画モードの場合の2通りを計算し、出力例のように時、分、秒とも 2 桁ずつ出力します。また "05" のように 10 の位が 0 の場合は、"0" をつけてください。

・入力される値
 複数のデータセットが与えられます。
 各データセットは以下のとおりです。
   T H S
 T, H, S はそれぞれ時、分、秒を表す整数です。
 T, H, S がすべて -1 のとき入力の終わりとします。データセットの数は 50 を超えません。

・期待する出力
 各データセットごとに
 1 行目に、テープの残りを標準録画した場合の録画可能時間の時、分、秒を半角コロン区切りで、
 2 行目に、テープの残りを3倍録画した場合の録画可能時間の時、分、秒を半角コロン区切りで
 出力して下さい。

僕が作成、提出したコードは、以下のとおりです。

/*
 Problem Set from Volume0 0074 : Videotape
 http://judge.u-aizu.ac.jp/
 C言語によるビデオテープの録画可能時間
 https://neguse-atama.hatenablog.com
*/
#include<stdio.h>
int main(void){
	int T,H,S,t,ans1,ans2,ans3;
	while(1){
		scanf("%d %d %d",&T,&H,&S);
		if(T==-1 && H==-1 && S==-1){
		    break;
		}
		t=7200-(3600*T+60*H+S);
		ans1=t/3600; ans2=(t%3600)/60; ans3=t%60;
		printf("%02d:%02d:%02d\n",ans1,ans2,ans3);
		t=t*3;
		ans1=t/3600; ans2=(t%3600)/60; ans3=t%60;
		printf("%02d:%02d:%02d\n",ans1,ans2,ans3);
	}
	return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
Problem Set from Volume0 0074 : Videotape