题目:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[10000],b[10000];//a是用来标志哪个数字被覆盖
void find(int n)//执行3n+1猜想 如果猜想中有哪一个数字出现了 记录到a数组里面
{
while(n!=1){
if(n%2)
{
n=(3*n+1)/2;;
a[n] = 1;
}
else
{
n/=2;
a[n] = 1;
}
}
}
int main()
{
int n,i,length=0;//输入n
int c[10000];//用于存放结果
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));//初始化数组
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(i=0;i<n;i++){
scanf("%d",&b[i]);//输入待测数据
find(b[i]);//执行数据 看哪些被覆盖了
}
for(i=0;i<n;i++){
if(a[b[i]]==0){//如果b【i]没有被覆盖
c[length++]=b[i]; //将该点的值存入到结果数组中
}
}
sort(c,c+length);//排序
printf("%d",c[length-1]);
for(i=length-2;i>=0;i--){
printf(" %d",c[i]);
}
printf("\n");
}
return 0;
}