Official
2.
3.
A - When? Editorial by KoD
答えの時刻を求める
答えの時刻が \(H\) 時 \(M\) 分であるとします。
\(0 \leq X \leq 100\) より、\(X \lt 60\) ならば \(H = 21\) であり、\(X \geq 60\) ならば \(H = 22\) です。また、\(M\) は \(X\) を \(60\) で割った余りに等しいです。
答えを出力する
時間または分が \(1\) 桁の場合、先頭に \(0\) を追加して \(2\) 桁として出力しなければなりません。これをどのように実装すればよいかを C++ / Python のそれぞれについて説明します。
C++ での実装例
1. 自前の関数を定義する
整数を引数として渡すと、必要に応じて \(0\) を埋めて長さ \(2\) の文字列にして返すような関数を定義すればよいです。
#include <iostream>
#include <string>
using namespace std;
string fix(int x) {
if (x < 10) {
return string{'0'} + to_string(x);
} else {
return to_string(x);
}
}
int main() {
int X;
cin >> X;
int H = X < 60 ? 21 : 22;
int M = X % 60;
cout << H << ':' << fix(M) << '\n';
}
2. std::setfill
、std:::setw
を使う
これらの関数を用いることで、出力の幅を指定したり、その際に埋める文字を指定したりすることができます。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int X;
cin >> X;
int H = X < 60 ? 21 : 22;
int M = X % 60;
cout << H << ':' << setw(2) << setfill('0') << M << '\n';
return 0;
}
3. std::printf
を使う
この問題では std::cout
ではなく std::printf
を用いた方が簡潔に書くことができます。C++20 からは std::format
が導入され、高機能な書式設定が標準で利用できるようになります。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int X;
cin >> X;
int H = X < 60 ? 21 : 22;
int M = X % 60;
printf("%d:%02d", H, M);
return 0;
}
Python での実装例
str.format()
を用いる
format
メソッドによって文字列の高機能な書式設定が可能です。\(0\) 埋めなどの処理も簡潔に書くことができます。
x = int(input())
h = 21 if x < 60 else 22;
m = x % 60
print('{}:{:02}'.format(h, m))
datetime
を用いる
標準の日時処理ライブラリ datetime
を用いると、日付や時刻の計算や出力を行うことができます。
from datetime import datetime, timedelta
begin = datetime(2022, 7, 2, hour=21)
delta = timedelta(minutes=int(input()))
answer = begin + delta
print(answer.strftime('%H:%M'))
posted:
last update: