PAT:1005. 继续(3n+1)猜想 (25) AC
#include<stdio.h>
#include<algorithm>
using namespace std;
bool HARSH[10066]; //实际上申请来之后初试都是false
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
fill(HARSH,HARSH+1066,false);
int n;
scanf("%d",&n);
int arr[1006],cnt=0;
for(cnt=0 ; cnt<n ; ++cnt)
{
scanf("%d",&arr[cnt]);
}
for(int i=0 ; i<cnt ; ++i)
{
int tmp=arr[i];
while(tmp!=1)
{
if(tmp%2==1)
tmp=(tmp*3+1)/2;
else
tmp/=2;
HARSH[tmp]=true; //标记为覆盖数
}
}
//数个数 只是为了输出的时候控制空格
int sum=0;
for(int i=0 ; i<cnt ; ++i)
if(HARSH[arr[i]]==false)
++sum;
sort(arr,arr+106,cmp);
//输出前sum个
for(int i=0 ; i<n ; ++i)
{
if(HARSH[arr[i]]==false)
{
printf("%d",arr[i]);
--sum;
if(sum>=1)
printf(" ");
}
}
return 0;
}