oj---pat----b1005---继续(3n+1)猜想

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oj---pat----b1005---继续(3n+1)猜想相关的知识,希望对你有一定的参考价值。

 

pat会给出“假条件”。有几个测试点n远大于100了。

set可以逆序遍历。

#include<cstdio>
#include<set>
using namespace std;
set<int> alln;
int num[10000]={0};
int main(){
    int k;
    while(scanf("%d",&k)!=EOF){
        int n=0;
        for(int i=0;i<k;i++){
            scanf("%d",&n);
            alln.insert(n);
            bool isprocessed=0;
            while(n!=1){
                if (!isprocessed&&num[n]>=1) break;
                 if(n%2==0){
                    n=n/2;
                    num[n]++;
                    isprocessed=1;
                }
                else if(n%2==1){
                    n=(3*n+1)/2;
                    num[n]++;
                    isprocessed=1;
                }
                
            }
        }
        bool flag=1;
        set<int>::reverse_iterator iter;
        for(iter=alln.rbegin();iter!=alln.rend();iter++){
            if(flag&&num[*iter]==0){
                printf("%d",*iter);
                flag=0;
            }
            else if(num[*iter]==0){
                printf(" %d",*iter);
            }            
        }
    }
    return 0;
}

 

以上是关于oj---pat----b1005---继续(3n+1)猜想的主要内容,如果未能解决你的问题,请参考以下文章

1005. 继续(3n+1)猜想

PAT Basic 1005. 继续(3n+1)猜想

PAT 1005 继续(3n+1)猜想

PAT 1005 继续(3n+1)猜想

1005 继续(3n+1)猜想

1005 继续(3n+1)猜想