hdu-3784-继续xxx定律

来源:互联网 发布:预算计价软件 编辑:程序博客网 时间:2024/05/16 11:37

解题思路:

1、先把输入的数据全部当做关键数,并求其覆盖数,如果其覆盖数在数组内,标记。

2、最后倒序输出没有标记的数即可。

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int N=1100;int main(){    int n,a[N],f[N],i,j;    while(scanf("%d",&n),n)    {        memset(a,0,sizeof(a));        memset(f,0,sizeof(f));        for(i=0;i<n;i++)        {            scanf("%d",&a[i]);            f[a[i]]=1;          //初始化标记         }        for(i=0;i<n;i++)        {            if(f[a[i]]==0)    //如果已经存在不必再求,节省时间             continue;            else            j=a[i];            while(j>1)            {                if(j%2==1)                {                    j=(j*3+1)/2;                }                else                j=j/2;                if(j<N)                {                    f[j]=0;    //将覆盖数标记                 }                            }                    }j=0;        for(i=n-1;i>=0;i--)        {            if(f[a[i]]&&j==1)            printf(" %d",a[i]);       //倒序输出没有被标记的数,注意格式、             if(f[a[i]]&&j==0)            {                printf("%d",a[i]);                j=1;            }                    }        printf("\n");    }    return 0; }

0 0
原创粉丝点击