Array
题目大意:
有一个数列,随机交换两个数,原数列和当前数列相同部分有可能有多少个
原题:
题目描述
Alice 有一个数列 ai。
但是她不喜欢这个数列,于是她决定随机交换其中两个数。
Alice 想知道,交换后的数列与原数列相同的数有多少个。请求出所有可能的
值。
输入
第一行一个正整数 n,表示 Alice 的数列的长度。第二行 n 个正整数,第 i 个数表示 ai,即交换前 的数列的第 i 项。
输出
一行若干个严格递增的 正整数,用空格隔开,表示交换后的数列与原数列相
同的数的个数。
输入样例
3
2 3 3
输出样例
1 3
说明
样例解释
交换后可能的数列有 2 3 3, 3 2 3, 3 3 2,个数分别是 3, 1, 1
对于 100% 的数据,1 ≤ n ≤ 100, 1 ≤ ai ≤ 1000。
解题思路:
交换两个数,只可能改变两个数,所以要不有n-2个,要不有n个,当没有不同的数的时候,没有n-2,当没有相同的数的时候,没有n
代码:
#include<cstdio>
using namespace std;
int n,p1,p2,num,sum,a[105];
int main()
{scanf("%d",&n);scanf("%d",&a[1]);for (int i=2;i<=n;++i){scanf("%d",&a[i]);if (a[i]!=a[1])//判断是否有不同的p1=1;if (p2) continue;for (int j=1;j<i;++j)//判断是否有相同的if (a[i]==a[j]){p2=1;break;}}if (p1&&p2) printf("%d %d",n-2,n);//分三种情况if (p1&&!p2) printf("%d",n-2);if (!p1&&p2||n==1) printf("%d",n);
}