ZeroJudge A282: 認真念書

題目敘述

題目採EOF方式收資料,每筆資料第一行有一個正整數N,第二行會有N個正整數,代表已經讀過的頁數。要求輸出還沒有讀過的頁數中最前面的頁數,詳細請見範例輸入/輸出。

範例輸入

5

1 3 4 5 6

4

1 2 3 4

5

2 3 4 5 6

範例輸出

2

5

1

解題思路

因為題目有明講N不會超過1000且頁數最多為2000頁,所以使用For迴圈從1跑到2000看有哪些頁數還沒讀到就直接輸出目前跑到的頁數然後break迴圈。可以使用Map來存取目前已經讀了哪些頁數,並使用For迴圈來判斷哪些頁數沒有被讀到來求答案,詳情請見範例程式碼。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(nullptr);
    int N;
    while (cin >> N)
    {
        map<int, int>MAP;
        for (int i = 0; i<N; i++)
        {
            int tmp;
            cin >> tmp;
            MAP[tmp] = 1;
        }
        for (int i = 1; i<=2000; i++)
        {
            if (MAP[i] == 0)
            {
                cout << i << endl;
                break;
            }
        }
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge M932: 蜜蜂觀察