首页 > 其他分享 >[pat乙]1005 继续(3n+1)猜想

[pat乙]1005 继续(3n+1)猜想

时间:2023-03-20 15:01:48浏览次数:35  
标签:输出 pat 数字 验证 int number 3n ans 1005


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

卡拉兹(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 个空格隔开,但一行中最后一个数字后没有空格。

输入样例:

6
3 5 6 7 8 11

输出样例:

7 6

####思路
1.做Callatz判断 拆分的数字进行标记
2.如果未标记 即为关键数字,放入新数组
3.降序排序并输出

#include <iostream>
#include <algorithm>
using namespace std;


int main() {
int flag[100001] = { 0 }, num[101] = { 0 }, ans[101] = { 0 };
int n, t, number = 0;

//测试关键数 输入
cin >> n;
for (int i = 0; i < n; i++) {
cin >> t, num[i] = t;

//做Callatz 如果是奇数 则执行t=3*t+1
//因为奇数执行该操作必然为偶数 所以直接执行 t/=2
//标记
while (t != 1)
t % 2 ? t = 3 * t + 1 : 0, t /= 2, flag[t] = 1;
}

//如果 未被标记 则为 关键数,加入ans
for (int i = 0; i < n; i++)
if (!flag[num[i]])
ans[number++] = num[i];

sort(ans, ans + number, greater<int>());

//输出 最后一位无空格
for (int i = 0; i < number; i++) {
cout << ans[i];

if (i != number - 1)
cout << " ";
}

return 0;
}


标签:输出,pat,数字,验证,int,number,3n,ans,1005
From: https://blog.51cto.com/u_16014765/6132943

相关文章

  • [pat乙]1010 一元多项式求导
    1010 一元多项式求导(25)设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000......
  • [pat乙]1012 数字分类
    1012数字分类(20)(20分)给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1=能被5整除的数字中所有偶数的和;A2=将被5除后余1的数字按给出顺序进行交错......
  • [pat乙]1006 换个格式输出整数
    1006换个格式输出整数(15分)让我们用字母B来表示“百”、字母S表示“十”,用12…n来表示不为零的个位数字n(<10),换个格式来输出任一个不超过3位的正整数。例如234......
  • 爬虫-day4——selenium登陆cnblogs、抽屉网半自动点赞、xpath的使用、selenium动作链
    目录一、selenium登录cnblogs二、抽屉半自动点赞三、xpath的使用四、selenium动作链4.1动作链案例五、自动登录12306六、打码平台使用七、使用打码平台自动登录八、使用......
  • PAT Basic 1036. 跟奥巴马一起编程
    PATBasic1036.跟奥巴马一起编程1.题目描述:美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝......
  • PAT Basic 1035. 插入与归并
    PATBasic1035.插入与归并1.题目描述:根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插......
  • PAT Basic 1034. 有理数四则运算
    PATBasic1034.有理数四则运算1.题目描述:本题要求编写程序,计算2个有理数的和、差、积、商。2.输入格式:输入在一行中按照 a1/b1a2/b2 的格式给出两个分数形式......
  • matlab genpath命令 查看搜索路径
    在命令窗口中输入genpath命令,可以得到MATLAB所有的搜索路径首尾连接而成的一个长字符串。示例:>>genpathans=D:\R2009a\toolbox;D:\R2009a\toolbox\aero;D:\R2009a\tool......
  • pat 乙级1031 查验身份证
    1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<math.h>56intmain()7{8intn;9scanf("%d",&n);10c......
  • 2023 ICPC香港区域赛(UCup) D Shortest Path Query
    啊对对对,下次题解写详细一点好不好。首先考虑naive的\(O(n^2)\),记\(dp[i][j]\)表示从\(1\)走到\(i\),恰好走了\(j\)条黑边的时候走过白边的最少数量。\(O(nm)\)......