题意:有N个编号为1、2、…和N的人。每个人1、2、…和N按顺序执行如下操作:如果还没有叫出人Ai的ID,就叫出人A i的ID。最后打印有多少人的ID没有被叫出来,按升序打印。
样例输入:
5
3 1 4 5 4
样例输出:
2
2 4
参考程序c++:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n+1],i;
for(i=1;i<=n;i++){
cin>>a[i];
}
bool b[n+1];
for(i=1;i<=n;i++){
b[i]=false;
}
for(i=1;i<=n;i++){
if(!b[i]){
b[a[i]]=true;
}
}
int sum=0;
for(i=1;i<=n;i++){
if(!b[i]){
sum++;
}
}
cout<<sum<<endl;
for(i=1;i<=n;i++){
if(!b[i])
cout<<i<<' ';
}
return 0;
}
我们先输入n和A数组,我们定义一个bool量,记录第i个人的ID有没有被叫到,然后再继续写一个循环,先判断第i个人的ID有没有被叫出,如果没有,就调出第Ai个人的ID。然后打印个数,最后打印哪些人没有被叫出。