思考する三角形▽

プログラミング初心者によるAtCoder解答解説

AtCoder Beginner Contest 114 [B - 754]

コメント歓迎です。
コンテストに参加したので1問ずつ記事を分けて解答を載せていきます。

今回はB問題です。

方針

この問題では、入力された数字列をどうやって3桁の数値に変換するかがポイントとなります。


まず、今回は入力の数字列を文字列として受け取りました。

string型で受け取ると先頭の数字を[0]とする配列として扱えるので便利です。


3桁の数字に変換するにあたって始点となる配列番号をfor文でループさせます。

そのたびにひと桁ずつ始点とその右隣、さらにその右隣の数字を3桁の数値に変換します。


具体的には桁上げをする必要がありますので、X = X * 10 + (右隣の数値)を繰り返す処理をします。


最後に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;
}