題目敘述
題目採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;
}
}
}
}
留言
張貼留言