题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805320306507776
AC代码:
#include<iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
bool cmp(int a,int b){
return a>b;//从大到小排序
}
int main(){
int n,m,a[110];
scanf("%d",&n);
bool HashTable[1000]={0};//HashTable[x]==true表示x被覆盖
//HashTable数组要开的足够大,因为关键数可能很大,否则可能出现段错误
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
m=a[i];
while(m!=1){
if(m%2==1)m=(3*m+1)/2;
else m=m/2;
HashTable[m]=true;
}
}
int count_=0;//记录"关键数"个数
for(int i=0;i<n;i++){
if(HashTable[a[i]]==false){//没被覆盖
count_++;
}
}
sort(a,a+n,cmp);//从大到小排序
for(int i=0;i<n;i++){
if(HashTable[a[i]]==false){
printf("%d",a[i]);
count_--;
if(count_>0) printf(" ");//控制输出格式
}
}
return 0;
}