PAT继续(3n+1)猜想

来源:互联网 发布:vb6数据库实例 贴吧 编辑:程序博客网 时间:2024/05/20 06:05

筛一下

注意数组不能开小,因为可能因为连续奇数而连乘


#include <stdio.h>#include <algorithm>using namespace std;int num[200], n;bool a[10005];int main(){    scanf("%d", &n);    for(int i = 0; i < n; ++i)        scanf("%d", &num[i]);    sort(num, num + n);// for(int i = 0; i < n; ++i)printf("%d ", num[i]);    for(int i = 0; i < n; ++i)    {        int m = num[i];        while( m != 1 )        {            if( m & 1 )                {                    m = (3 * m + 1) / 2;                    a[m] = true;//筛                }            else            {                m /= 2;                a[m] = true;//筛            }//printf("%d %d\n", i, a[7]);        }    }    int c(0);    for(int i = n - 1; i >= 0; --i)    {        if( a[num[i]] == false )        {            if(c)                printf(" %d", num[i]);            else            {                ++c;                printf("%d", num[i]);            }        }    }    return 0;}
题目来源,PAT1005