1005 继续(3n+1)猜想 (25 分)
- 对输入的每一个数,进行3n+1猜想的操作,对其中经过的每一个数x,插入集合中表示x被覆盖。
- 记录关键数,并从大到小排序,最后输出即可。
const int N=110;
int a[N];
set<int> S;
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
a[i]=x;
while(x != 1)
{
if(x & 1)
x=(3*x+1)/2;
else
x=x/2;
S.insert(x);
}
}
vector<int> res;
for(int i=0;i<n;i++)
if(S.count(a[i]) == 0)
res.pb(a[i]);
sort(res.begin(),res.end(),greater<int>());
for(int i=0;i<res.size();i++)
if(i) cout<<' '<<res[i];
else cout<<res[i];
cout<<endl;
//system("pause");
return 0;
}