PAT 乙级 -- 1005 -- 继续(3n+1)猜想
题目简述
卡拉兹(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
C++代码样例
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <functional>
using namespace std;
//3n+1问题处理函数
int* arrayProc(int *ret_score,int score)
{
int i = 0 , j = 0;
memset(ret_score,0,sizeof(ret_score));
while(score > 1)
{
if(score % 2 != 0 )
{
score = (3*score+1)/2;
}else{
score = score/2;
}
*(ret_score+i) = score;
i++;
}
return ret_score;
}
//判断数组内是否存在某数值
int inArray(int* scoreArray , int score , int num)
{
int i = 0;
for(i = 0 ; i < num ; i++)
{
if(score == *(scoreArray+i))
{
return i+1; //返回i+1,以便主函数根据返回0判别未找到
}
}
return 0;
}
int main(void)
{
int num = 0;
int i = 0 , j = 0;
int k = 0;
int *score = NULL;
int *score_test = NULL;
int *ret_score = NULL;
scanf("%d",&num);
score_test = (int*)malloc(255*sizeof(int));
score = (int*)malloc(num*sizeof(int));
ret_score = (int*)malloc(255*sizeof(int));
memset(score_test,0,sizeof(score_test));
memset(score,0,sizeof(score));
for(i = 0 ; i < num ; i++)
{
scanf("%d",score+i);
}
for(i = 0 ; i < num ; i++)
{
score_test = arrayProc(ret_score,*(score+i));
for(j = 0 ; *(score_test+j)!=0 ; j++)
{
if(k = inArray(score,*(score_test+j),num))
{
*(score+k-1) = 0;
}
}
}
sort(score,score+num,greater<int>());
for(i = 0 ; *(score+i)!=0 ; i++)
{
if(*(score+i+1) == 0)
{
printf("%d",*(score+i));
}else{
printf("%d ",*(score+i));
}
}
free(score_test);
free(score);
return 0;
}
PAT 乙级 -- 1005 -- 继续(3n+1)猜想的更多相关文章
- PAT 乙级 1005. 继续(3n+1)猜想 (25)
1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情 ...
- PAT乙级 1005. 继续(3n+1)猜想 (25)
1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...
- [C++]PAT乙级1005. 继续(3n+1)猜想 (25/25)
/* 1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推 ...
- PAT 乙级 1005 继续(3n+1)猜想 (25) C++版
1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...
- PAT 乙级 1005.继续(3n+1)猜想 C++/Java
1005 继续(3n+1)猜想 (25 分) 题目来源 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记 ...
- 【PAT】1005. 继续(3n+1)猜想 (25)
1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中 ...
- PAT(B) 1005 继续(3n+1)猜想(Java)
题目链接:1005 继续(3n+1)猜想 分析 找出所有的被"覆盖"的数,然后再将输入的数中不在被"覆盖"的数中的数添加到"关健数"中.输 ...
- PAT Basic 1005 继续(3n+1)猜想 (25 分)
卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...
- 1005 继续(3n+1)猜想 (25 分)
1005 继续(3n+1)猜想 (25)(25 分) - 过期汽水的博客 - CSDN博客https://blog.csdn.net/qq_40167974/article/details/80739 ...
随机推荐
- SVHN数据集 Format1 剪裁版
SVHN数据集官网:http://ufldl.stanford.edu/housenumbers/ SVHN数据集官方提供的有两种格式 Format1是那种在街上拍的照片,每张照片的尺寸都不同,然后l ...
- CVE-2019-20372-Nginx error_page 请求走私
一.漏洞简介 Nginx 1.17.7之前版本中 error_page 存在安全漏洞.攻击者可利用该漏洞读取未授权的Web页面. 二.漏洞影响 Ngnix < 1.17.7 三.复现过程 错误代 ...
- 关于PHP的表单提交显示
实现功能:html页面,向表单内填入账号.密码:php页面,将填写的账号与密码信息展示出来. demo6.html代码如下: 1 <!DOCTYPE html> 2 <html& ...
- CVE-2019-12409-Apache Solr JMX服务远程代码执行
漏洞分析 https://www.freebuf.com/vuls/218730.html 漏洞介绍 该漏洞源于默认配置文件solr.in.sh中的ENABLE_REMOTE_JMX_OPTS配置选项 ...
- drf给上传图片重命名
1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在storage.py中添加如下代码: #复制代码 -- coding: UTF-8 ...
- 修饰符static和abstract
修饰符static和abstract static static可以修饰类中的方法,属性等,被修饰后的方法和属性可以通过类名直接调用也可以通过对象调用.普通的变量只能通过对象进行调用. 静态方法直接可 ...
- 使用quartz.net 完成一个winform版的任务提醒工具
这个任务提醒工具是这样的,是每日定时执行,触发时间为 小时和分钟.每天早上来就可以把当天要做的添加到datagridview中,只记录了标题和内容和时间.双击dgv就查看内容. 如果每天计划重复,也可 ...
- SpringMVC源码分析和启动流程
https://yq.aliyun.com/articles/707995 在Spring的web容器启动时会去读取web.xml文件,相关启动顺序为:<context-param> -- ...
- C# yield return 原理探究
天需要些一个小工具,需要使用到多线程读写程序集,接口方法返回值类型需要为"IEnumerable<string>"这里用到了"yield return&quo ...
- 【odoo14】第二十三章、管理邮件
邮件集成是odoo最重要的特性.我们可以通过odoo收发邮件.我们甚至可以管理业务文档上的电子邮件,如潜在客户.销售订单和项目.本章,我们将探讨在odoo中处理邮件的方式. 配置邮件服务器 管理文档中 ...