代码如下
#include <iostream>
#include <map>
using namespace std;
int main(int argc, char **argv)
{
map<int,int> m;
int n,inp;
cin>>n;
while(n--){ //以此输入存入map中
cin>>inp;
m[inp]=0;
}
int tmp;
for(auto i:m){ //循环验证,将非关键数在map中搜索,若存在则将其标志位置1
tmp=i.first;
while(tmp!=1){
tmp=(tmp%2==0)?(tmp/2):(tmp*3+1)/2;
if(m.count(tmp)){
m[tmp]=1;
}
}
}
int flag=0; //逆序输出标志位为0的数(关键数)(map默认是顺序)
for(auto j=m.end();j!=m.begin();){
auto i=--j;
if((*i).second==0){
if(flag==1) cout<<" ";
flag=1;
cout<<(*i).first;
}
}
return 0;
}
与柳诺给出的代码相比,下图是柳诺代码表现
下面是本文代码表现:
总之各有取舍,主要是柳诺的我没看明白。。。。