身为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,结果导致溢出,当时还没察觉到,到现在才明白,审题的重要性,理解概念,明题意,所谓的明题意就是
考查的是什么,题干的大概意思是什么,构成在解题之前的思路框架。因此要细心读题,知道那句话什么意思。