小A在上数学课时发现有一个数列a,但他不喜欢这个数列,于是他决定随机交换其中两个数。小A想知道,交换后的数列与原数列相同的数的个数,请求出所有可能的值。
输入
第一行一个正整数 n,表示数列的长度。
第二行 n 个正整数,第 i 个数表示 a[i],即交换前的数列的第 i 项。
1 ≤ n ≤ 100,1 ≤ a[i] ≤ 1000。
输出
一行若干个递增的正整数,空格隔开,表示交换后的数列与原数列相同的数的个数。
输入样例
3 2 3 3
输出样例
1 3
这是一道不难但有逻辑性的综合题。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, a[101], b[1001];
bool f, p;
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
b[a[i]]++;
a[0] = max(a[0], a[i]);
}
for(int i = 1; i <= a[0]; i++){
if(b[i] == 1){
f = 1;
} else if(b[i] > 1){
p = 1;
}
}
if(p &&! f) cout << n;
else if(f &&! p) cout << n - 2;
else cout << n - 2 << " "<< n;
return 0;
}