信息学奥赛一本通 1086:角谷猜想 | OpenJudge NOI 1.5 21
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1086:角谷猜想 | OpenJudge NOI 1.5 21
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1086:角谷猜想
OpenJudge NOI 1.5 21:角谷猜想
【題目考點】
1. while循環
【解題思路】
- 設變量n
- 判斷n是否是奇數
- 如果n是奇數,那么將n乘3加1,即n = n * 3 + 1;,并輸出算式。
- 如果n是偶數,那么將n除以2,即n /= 2;,并輸出算式。
- 判斷n是否為1,如果是,那么跳出循環。如果不是,繼續循環,判斷n是否是奇數。
?\bullet? 注意:
雖然題目中限定 n <= 2000000,但是n在不斷乘3加1的過程中,n的值可能會超出int型可表示的范圍,因此本題中變量n必須設為long long類型。
【題解代碼】
解法1:使用cout輸出算式
#include <bits/stdc++.h> using namespace std; int main() {long long n;//不斷乘3+1的過程中,數值會超出int的范圍,因而得用long long類型 cin>>n;while(n != 1){if(n % 2 == 1)//如果n是奇數{cout<<n<<"*3+1="<<n * 3 + 1<<endl;n = n * 3 + 1;}else{cout<<n<<"/2="<<n / 2<<endl;n /= 2;}}cout<<"End";return 0; }解法2:使用printf輸出算式
#include <bits/stdc++.h> using namespace std; int main() {long long n;//不斷乘3+1的過程中,數值會超出int的范圍,因而得用long long類型 cin>>n;while(n != 1){if(n % 2 == 1){printf("%ld*3+1=%ld\n", n, n * 3 + 1);n = n * 3 + 1;}else{printf("%ld/2=%ld\n", n, n / 2);n /= 2;}}cout<<"End";return 0; } 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1086:角谷猜想 | OpenJudge NOI 1.5 21的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(2060:【例1.1】
- 下一篇: 信息学奥赛一本通(1083:计算星期几)