博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3784 继续xxx定律
阅读量:4518 次
发布时间:2019-06-08

本文共 955 字,大约阅读时间需要 3 分钟。

当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数,5,8,4,2称为覆盖数。现在输入n个数字a[i],根据关键数与覆盖数的理论,我们只需要验证其中部分数就可以确定所有数满足xxx定律,输出输入的n个数中的关键数。如果其中有多个关键数的话按照其输入顺序的逆序输出。


 

Input
输入数据包含多个用例,每个用例首先包含一个整数n,然后接下来一行有n个整数a[i],其中:

1<=n<=500

1<a[i]<=1000


 

Output
请计算并输出数组a中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。


 

Sample Input
3
3 8 4
5
3 8 4 7 15
5
3 8 4 15 7
0


 

Sample Output
3
15 7 3
7 15 3


 

Source
 
// 3n+1 问题
// 这题目真是好难理解
// 就是求序列中哪些数不会被覆盖

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace
 std;
bool
 h[200000];
int
 main()
{


     int
 n,m,i,k,a[503],b[503];
     while
(scanf("%d",&n),n)
     {

        memset(h,0,sizeof(h));
        for
(i=0;i<n;i++)
           scanf("%d",&b[i]);
       for
(i=0;i<n;i++)  ///坑人呀,或许是我想的不周全,理解不到位
      {

          m=b[i];
        while
(m>1)
        {

            if
(m%2)
              m=(m*3+1)>>1;
             else

              m=m>>1;
            h[m]=1;
        }
      }

        for
(k=i=0;i<n;i++)
        {

              if
(!h[b[i]])
               a[k++]=b[i];
        }

        printf("%d",a[--k]);
        for
(k--;k>=0;k--)
         printf(" %d",a[k]);
         printf("\n");
     }

        return
 0;
}

                                                       -------江财小子

转载于:https://www.cnblogs.com/372465774y/archive/2012/03/28/2421647.html

你可能感兴趣的文章
端口号
查看>>
mysql for macOS安装
查看>>
iOS中的KeyChain的用途
查看>>
jquery与checkbox的checked属性的问题
查看>>
HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)
查看>>
java 格式化字符串
查看>>
[.Net]轻量ORM——Dapper
查看>>
语言基础
查看>>
C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
查看>>
C#中字符串转换成枚举类型的方法
查看>>
psplash
查看>>
git的安装和简单使用
查看>>
20151024-1025-威海-第5届全国高校软件工程专业教育年会参会总结
查看>>
Airplace平台
查看>>
TinyOS实例介绍
查看>>
15个nosql数据库
查看>>
css hack 尽我所见
查看>>
[转]ORACLE联机日志文件无故全部消失
查看>>
Javascript基础学习12问(四)
查看>>
[原]VS2012入门图文教程——第一个程序Hello World
查看>>