几个点
1:题目的意思,关键在于弄清楚什么是“关键数”,不被别人覆盖的是“关键数”;
2:hashtable不能设成hashtable[110],因为有的数中途会出现如224这样的大数,会越界。加判断 if (numx<100) 即可;
3:bool hashtable[110] 要写成bool hashtable[110] = {0},否则hashtable[0]会是true。
#include <cstdio>
#include <algorithm>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int n;
scanf("%d",&n);
bool hashtable[110]={0};
int num[110];
for (int i=0;i<n;i++){
scanf("%d",&num[i]);
}
int p=0;
int output[110];
for (int i=0;i<n;i++){
int numx = num[i];
while (numx!=1) {
if (numx %2 == 0) numx/=2;
else numx = (numx*3+1)/2;
if (numx<100) hashtable[numx] = true;
}
}
for (int i=0;i<n;i++){
if (hashtable[num[i]] == false){
output[p++] = num[i];
}
}
sort(output,output+p,cmp);
for (int i=0;i<p;i++){
if (i==0) printf("%d",output[i]);
else printf(" %d",output[i]);
}
return 0;
}