PAT乙級題庫1005(水)

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

#define MAXN 100000

int main()
{
    int a[MAXN];
    memset(a,0,sizeof(a));
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        int m;
        scanf("%d",&m);
        if(a[m]==0){
            a[m]=2;
        }else{
            continue;
        }
        while(m!=1){
            if(m%2==0){
                m/=2;
            }else{
                m=(3*m+1)/2;
            }
            a[m]=1;
        }

    }
    int flag=0;
    for(int i=MAXN-1;i>0;i--){
        if(a[i]==2){
            if(flag){
                cout<<" ";
            }
            flag=1;
            cout<<i;
        }
    }
    cout<<"\n";
    return 0;
}

 

可能會出現段錯誤,注意調大數組;

有更優方法搜索,可以考慮排序,但暫且不表.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章