题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805320306507776
分析:简单题,思路是用数组保存对应的数字,然后用每个数字去划掉被它覆盖的值。注意的是,这里数组的空间要开大,因为
3n+1会远大于100
代码:
#include<iostream>
using namespace std;
#include<cstring>
#include<string>
#include<cctype>
#include<cmath>
#include<vector>
int main()
{
int k;
cin>>k;
int a[100000]={0,}; //数组空间开大
int n;
for(int i=0;i<k;++i)
{
cin>>n;
a[n]=n; //数字对应的位置
}
for(int i=0;i<102;++i)
{
if(a[i]!=0)
{
int p=a[i];
while(p!=1)
{
if(p%2==0)
{
a[p/2]=0;
p=p/2;
}
else
{
a[(3*p+1)/2]=0;
p=(3*p+1)/2;
}
}
}
}
int m=1;
for(int i=101;i>=0;--i)
{
if(a[i]!=0)
{
if(m==1)
{
cout<<i;
++m;
}else
cout<<" "<<i;
}
}
return 0;
}
451

被折叠的 条评论
为什么被折叠?



