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

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的时候,我们需要计算3、5、8、4、2、1,则当我们对n=5、8、4、2进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这4个数已经在验证3的时候遇到过了,我们称5、8、4、2是被3“覆盖”的数。我们称一个数列中的某个数n为“关键数”,如果n不能被数列中的其他数字所覆盖。

现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。

输入格式:每个测试输入包含1个测试用例,第1行给出一个正整数K(<100),第2行给出K个互不相同的待验证的正整数n(1<n<=100)的值,数字间用空格隔开。

输出格式:每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用1个空格隔开,但一行中最后一个数字后没有空格。

输入样例:

  1. 6
  2. 3 5 6 7 8 11

输出样例:

  1. 7 6
  2.  
  3. 思路:建造两个set容器,s1存储所有数变为1过程中产生的数,s2则存储关键数
    注意点:后续输入的数覆盖了前面的数,所以需要判断变为1的过程中是否包含了关键数中的关键数,如果有,将这个关键数删除
  1. // 1005.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include<iostream>
  6. #include<algorithm>
  7. #include<set>
  8.  
  9. using namespace std;
  10.  
  11. void get_num(int n, set<int>& s1, set<int>& s2);
  12.  
  13. int main()
  14. {
  15. int N,temp;
  16.  
  17. //s1为所有输入的数变成1过程中产生的数
  18. //s2为关键数
  19. set<int> s1,s2;
  20.  
  21. cin >> N;
  22.  
  23. for (int i = ; i < N; ++i)
  24. {
  25. cin >> temp;
  26.  
  27. //如果输入的数没有被其他的数覆盖
  28. if (find(s1.begin(), s1.end(), temp) == s1.end())
  29. {
  30. s2.insert(temp);
  31. get_num(temp, s1, s2);
  32. }
  33. }
  34.  
  35. set<int>::reverse_iterator i,end = s2.rend();
  36.  
  37. for (i = s2.rbegin(); i != end; ++i)
  38. {
  39. if (i == s2.rbegin())
  40. cout << *i;
  41. else
  42. cout << " " << *i;
  43. }
  44.  
  45. cout << endl;
  46.  
  47. return ;
  48. }
  49.  
  50. void get_num(int n,set<int>& s1,set<int>& s2)
  51. {
  52. int i;
  53.  
  54. s1.insert(n);//将该数也插入容器中,防止后面的数覆盖此数而未检查到
  55.  
  56. while (n != )
  57. {
  58. if (n & )
  59. n = * n + ;
  60.  
  61. n /= ;//无论奇偶都会除以2
  62.  
  63. if (find(s2.begin(), s2.end(), n)!=s2.end())
  64. {
  65. s2.erase(n);//如果该数覆盖前面的数,则将前面的数从关键数容器删除
  66.  
  67. break;
  68. }
  69.  
  70. s1.insert(n);
  71. }
  72. }

PAT 乙级 1005 继续(3n+1)猜想 (25) C++版的更多相关文章

  1. PAT 乙级 1005. 继续(3n+1)猜想 (25)

    1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B   卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情 ...

  2. PAT乙级 1005. 继续(3n+1)猜想 (25)

    1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...

  3. [C++]PAT乙级1005. 继续(3n+1)猜想 (25/25)

    /* 1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推 ...

  4. 【PAT】1005. 继续(3n+1)猜想 (25)

    1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中 ...

  5. PAT 乙级 1005.继续(3n+1)猜想 C++/Java

    1005 继续(3n+1)猜想 (25 分) 题目来源  卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记 ...

  6. PAT 乙级 -- 1005 -- 继续(3n+1)猜想

    题目简述 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂.        当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如 ...

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

    卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...

  8. PAT 1005 继续(3n+1)猜想 (25)(代码)

    1005 继续(3n+1)猜想 (25)(25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下 ...

  9. PAT-B 1005. 继续(3n+1)猜想 (25) c++

    1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...

随机推荐

  1. lesson3 overfitting -fastai

    VGG:3*3Imagenet:7*7,9*9论文中证明3*3更胜一筹,但是用多少并没有定论微调:删掉模型的中间只对最后一层微调:model.pop,就删掉了最后一层 如何决定训练多少层?:·看论文上 ...

  2. GraphQL和C#

    GraphQL ---02 GraphQL和C#结合的实战项目   本文章是介绍和记录如何创建GraphQL项目,以及如何使用GraphQL进行数据的相关操作.项目参照GraphQL .Net 的官方 ...

  3. java-抽象类的成员特点

    1.成员变量:既可以是变量,也可以是常量.abstract不能修饰成员变量. 2.构造方法:有.用于子类访问父类数据的初始化. 3.成员方法:既可以是抽象的,也可以是非抽象的. - 抽象方法:强制要求 ...

  4. 《DSP using MATLAB》Problem 5.8

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  5. MySQL中INFORMATION_SCHEMA

    select database();  获取当前连接的数据库name 来源:http://www.cnblogs.com/drake-guo/p/6099436.html select auto_in ...

  6. 直面Java 第004期。

    什么是值传递,什么是引用传递.为什么说Java中只有值传递 对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的 ...

  7. day 4 Socket 和 NIO Netty

    Scoket通信--------这是一个例子,可以在这个例子的基础上进行相应的拓展,核心也是在多线程任务上进行修改 package cn.itcast.bigdata.socket; import j ...

  8. 【SpringBoot】单元测试进阶实战、自定义异常处理、t部署war项目到tomcat9和启动原理讲解

    ========================4.Springboot2.0单元测试进阶实战和自定义异常处理 ============================== 1.@SpringBoot ...

  9. diskcache

    DiskCache: Disk Backed Cache DiskCache is an Apache2 licensed disk and file backed cache library, wr ...

  10. MySQL--Semi-join(半连接)优化策略

    Semi-join(半连接)半连接主要场景:检查一个结果集(外表)的记录是否在另外一个结果集(字表)中存在匹配记录,半连接仅关注”子表是否存在匹配记录”,而并不考虑”子表存在多少条匹配记录”,半连接的 ...