角谷猜想给我带来的启示。(通过C++以实现。)

 

身为oi初心者,显然道阻且长,途中遇到很多问题,所谓的问题,是自身能力的缺陷所在,应予以必要之修正。

本题为角谷猜想(1.5.21),题干是这样的:

对于任意一个正整数,如果是奇数,则*3+1,如果是偶数,则/2,得到的结果再按上述规则重复处理,最终能得到1。如,假定初始整数为5,计算过程分别为16、8、4

2、1。 要求:程序要求输入一个整数,将经过处理得到的1输出来。最后一行输出「end」。如果输入为1,直接输出「end」。

思路:首先,大致地审完题,明题意。对于输入的是奇数是偶数,显然要使用条件语句,然后所谓的规则重复处理,而是循环控制,至于是for循环还是while循环,题干

中出现了对于奇数或是偶数的如何操作的条件,我们选择while循环 ,基本结题框架就布置ok了。在微观分析,题干中说得到的结果再按上述规则重复处理再根据后面的

假定整数为5以及其计算过程,我们可以了解到角谷猜想的含义,特别之处奇数,当输入的为奇数时,再*3+1那就成为偶数了,便按照规则要/2,再继续下去在商成为1之

前一直是偶数。

放代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 int main(){
 6     int a;
 7     cin>>a;
 8     if (a % 2 == 0 ){
 9         while (a != 1){
10             a /= 2.0;
11             printf("%d\n",a);
12         }
13         cout<<"END"<<endl;
14 
15     }else if (a % 2 != 0){
16         a = 3 * a + 1;
17         while (a != 1){
18             a /= 2.0;
19             printf("%d\n",a);
20         }
21         cout<<"END"<<endl;
22     }else{
23         cout<<"END"<<endl;
24     }
25 
26     return 0;
27 }

(ps 那个除数可以不是2.0)

我们要着重讲这个呢?原因是,由于我的思维的不严谨,导致以为是奇数时就要一直*3+1,结果导致溢出,当时还没察觉到,到现在才明白,审题的重要性,理解概念,明题意,所谓的明题意就是

考查的是什么,题干的大概意思是什么,构成在解题之前的思路框架。因此要细心读题,知道那句话什么意思。

posted @ 2019-08-06 18:55  rchco39  阅读(1388)  评论(0编辑  收藏  举报