1005 继续(3n+1)猜想 (25 分)

  1. 对输入的每一个数,进行3n+1猜想的操作,对其中经过的每一个数x,插入集合中表示x被覆盖。
  2. 记录关键数,并从大到小排序,最后输出即可。
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;
}
posted @ 2021-02-17 21:02  Dazzling!  阅读(23)  评论(0编辑  收藏  举报