角谷猜想給我帶來的啟示。(通過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,結果導致溢出,當時還沒察覺到,到現在才明白,審題的重要性,理解概念,明題意,所謂的明題意就是

考查的是什么,題干的大概意思是什么,構成在解題之前的思路框架。因此要細心讀題,知道那句話什么意思。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM