題目敘述
本題採EOF方式收資料,每筆資料第一行有一個正整數N,下一行會有N個整數。B2-Sequence的條件為任意兩個數字的和 (包括自己加自己) 不會出現超過一次。要求輸出數列是否為B2-Sequence。
範例輸入 #1
4
1 2 4 8
4
3 7 10 14
5
13 14 15 16 17
範例輸出 #1
Case #1: It is a B2-Sequence.
Case #2: It is not a B2-Sequence.
Case #3: It is not a B2-Sequence.
解題思路
使用兩個For迴圈將所有組合的任意兩數相加,需要注意的是第二個裡面的迴圈j要等於i,要避免往回加的情況。舉例1+2等於2+1,因為要用Map來確認任意兩數的和出現過幾次,且這樣子其實只有算一次的情況,所以不能往回加,如果有任意兩數的和已經出現過的情況,可以直接Break迴圈並輸出答案。Case的部分可以在EOF外面宣告一個變數每次進來While迴圈做+1即可。
解題程式碼如下 (僅供參考):
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N, count = 1;
while (cin >> N)
{
vector<int>num;
map<int, int>MAP;
for (int i = 0; i<N; i++)
{
int tmp;
cin >> tmp;
num.push_back(tmp);
}
bool stop = false;
for (int i = 0; i<N; i++)
{
for (int j = i; j<N; j++)
{
if (MAP[num[i]+num[j]] != 0)
{
stop = true;
break;
}
MAP[num[i]+num[j]]++;
}
if (stop) break;
}
if (stop) cout << "Case #" << count << ": It is not a B2-Sequence.\n";
else cout << "Case #" << count << ": It is a B2-Sequence.\n";
count++;
}
}
留言
張貼留言