けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

JOI 予選 2007 B - 未提出者は誰だ (AOJ 0511, 難易度 2)

for 文を二重にしたり、フラグを管理したりする練習!

問題概要

 28 個の整数値が与えられる。これらの整数値は  1 以上  30 以下の整数から 2 個を除外したものとなっている。

その除外された 2 個の整数値を小さい順に答えよ。

考えたこと

 1 から  30 までの数に対して、順に「その数が 28 個の整数の中に含まれているか」を調べていけば OK。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 28 人の番号を受け取る
    vector<int> ids(28);
    for (int i = 0; i < 28; ++i) cin >> ids[i];
    
    // 1 から 30 までを順に試していき、番号があるかどうかを check していく
    for (int i = 1; i <= 30; ++i) {
        // 番号があるかどうかを check するフラグ
        bool exist = false;
        
        // 28 人の番号を順に見ていく
        for (int j = 0; j < ids.size(); ++j) {
            // 番号があったら
            if (ids[j] == i) {
                // フラグを on にする
                exist = true;
            }
        }
        
        // フラグが off のままだったら、その番号はないので出力する
        if (!exist) {
            cout << i << endl;
        }
    }
}