PAT乙级1005,用C语言进行编程,继续卡拉兹猜想

今天的这道题目着实把我难住了好久,不愧是PAT乙级中值25分的一道题。这道题呢,是在PAT乙级1001的基础上来增加了一些难度,但是呢,还没有涉及到数据结构,可以说只需要盘清楚逻辑,就可以做这道题了。我们先来看一看这道题描述了什么:当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推到的每一个数。例如对n=3验证的时候,我们需要计算3、5、8、4、2、1,当我们对n=5、8、4、2进行验证的时候,由于我们之前在验证3的时候已经递推过了,所以就不需要验证这些数字。看到这句话的时候,
摘要由CSDN通过智能技术生成

今天的这道题目着实把我难住了好久,不愧是PAT乙级中值25分的一道题。

这道题呢,是在PAT乙级1001的基础上来增加了一些难度,但是呢,还没有涉及到数据结构,可以说只需要盘清楚逻辑,就可以做这道题了。

我们先来看一看这道题描述了什么:

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推到的每一个数。

例如对n=3验证的时候,我们需要计算3、5、8、4、2、1,当我们对n=5、8、4、2进行验证的时候,由于我们之前在验证3的时候已经递推过了,所以就不需要验证这些数字。

看到这句话的时候,我还有些不解,但其实很好理解。

我来稍微理一理逻辑:

当n=3的时候,n=3是奇数,根据卡拉兹猜想,奇数要3n+1,然后除以2,很显然可以得到5;

继续往下推,n=5是奇数,(3n+1)/2=8;

偶数是直接除以2,所以8/2=4,4/2=2,2/2=1。

很显然,后面的这些数字5、8、4、2,在我们用卡拉兹猜想验证n=3的时候已经都用到过了,自然而然地也不需要再进行验证了。

审题分析,理清逻辑,流程图

我在每次做这些题目的时候,都会先理逻辑,然后画一个流程图,主要目的呢就是为了帮助我之后如果想来复盘题目的话,能够快速地知道自己哪里出现了问题,并且会较为详细地记录自己的做题过程。

1、第一行给出一个正整数K。

2、第二行给出K个互不相同的待验证的正整数n(1<n<=100)的值,由于要对这些给出的正整数进行数值上的判断,所以最好用数组来进行存储,主要是用来存储一系列相同类型的变量,然后再对数组中的数据来进行处理,需要在for循环中。

3、接下来就是要进行卡拉兹猜想验证,与之前状态相同,就是遍历整个数组,然后从第一个数字开始验证,所以我们要用一个for循环来遍历整个数组。

4、然后,很多数字会在进行卡拉兹猜想验证的时候出现,只要把这些出现的数字与原本数组中的数字进行比较,亦或者直接把原本数组中的这些数字给删除/给这些出现过的数字

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值