码迷,mamicode.com
首页 > 其他好文 > 详细

P1001 害死人不偿命的(3n+1)猜想 (Basic Level)

时间:2019-10-01 18:56:37      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:第一题   结合   技术   png   basic   das   研究生   style   ==   

  为了考浙江的研究生,我来被PAT虐一下,PAT这是PAT最简单的等级——乙。好了,话不多说,看题。

技术图片

  作为入门级别,第一题还是很友好的。题目一遍下来整个代码的就出来了,比水仙花数还简单。说一下思路:

    首先先看看要我们干什么,哦,n经过几次卡拉兹猜想才能到1,n - > 1, 那应该要个循环。

    那什么是卡拉兹猜想,题目里说了,我就不重复了。从卡拉兹猜想很容易就可以知道 是两个选择条件。

  结合上面所有得出就可以快速的写出代码了。

实现

  

技术图片
 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int num;
 6 
 7     while (~scanf("%d", &num))
 8     {
 9         int count = 0;
10         while (num != 1)
11         {
12             if (num % 2)
13             {
14                 num = (3 * num + 1) / 2;
15             }
16             else
17             {
18                 num /= 2;
19             }
20             count++;
21         }
22         printf("%d\n", count);
23     }
24     return 0;
25 }
非递归

  这道题还有递归解法

技术图片
 1 #include <stdio.h>
 2 
 3 int callatz(int num);
 4 int count = 0;
 5 int main()
 6 {
 7     int num;
 8 
 9     while (~scanf("%d", &num))
10     {
11         count = 0;
12         printf("%d\n", callatz(num));
13     }
14     return 0;
15 }
16 int callatz(int num)
17 {
18     if (1 == num)
19     {
20         return count;
21     }
22     if (num % 2)
23     {
24         callatz((num * 3 + 1) / 2);
25     }
26     if (!(num % 2))
27     {
28         callatz((num / 2));
29     }
30     return ++count;
31 }
递归实现

前路多艰,诸君共勉。

  

P1001 害死人不偿命的(3n+1)猜想 (Basic Level)

标签:第一题   结合   技术   png   basic   das   研究生   style   ==   

原文地址:https://www.cnblogs.com/daker-code/p/11615652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!