AtCoder Beginner Contest 114 [B - 754]
コメント歓迎です。
コンテストに参加したので1問ずつ記事を分けて解答を載せていきます。
今回はB問題です。
方針
この問題では、入力された数字列をどうやって3桁の数値に変換するかがポイントとなります。
まず、今回は入力の数字列を文字列として受け取りました。
string型で受け取ると先頭の数字を[0]とする配列として扱えるので便利です。
3桁の数字に変換するにあたって始点となる配列番号をfor文でループさせます。
そのたびにひと桁ずつ始点とその右隣、さらにその右隣の数字を3桁の数値に変換します。
具体的には桁上げをする必要がありますので、を繰り返す処理をします。
最後に753との差の絶対値をとり、最小となる数値を出力します。
コード(AC)
#include <iostream> #include <cmath> using namespace std; int main() { // 入力 string S; cin >> S; int digit = S.size(); // 入力の桁数 int ans = 1000; // 数字列を左から順に3桁の数値へ変換 for (int i = 0; i < digit - 2; i++) { int X = 0; X = S[i] - '0'; for (int j = 1; j < 3; j++) { X = X * 10 + S[i + j] - '0'; } ans = min(abs(753 - X), ans); } // 出力 cout << ans << endl; }