題目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1032php
1、題目要求ios
1)給出一個正整數n,若是n爲奇數,則n=3n+1,不然n=n/2函數
2)設數n按1)中的運算方式,最少通過CollatzStep(n)次運算可以變成1spa
3)現給出兩個正整數i和j,問數i和j之間全部數字裏函數CollatzStep(n)可取到的最大值code
須要注意的是:ci
1)i與j的大小關係是不必定的get
2)最後輸出結果時數字i和j須要按照順序輸出io
2、程序代碼class
#include<iostream> using namespace std; //計算一個正整數通過奇偶歸一猜測多少步能夠到1 int CollatzStep(int n) { int step = 1; while(n != 1) { if(n % 2) { n = 3 * n + 1; } else { n /= 2; } step++; } return step; } int main() { int i, j, cur; //最小值i,最大值j,cur用來進行從i到j的遍歷 int temp; //臨時變量 int curstep; //數字cur迭代到1所花費的步數 int maxstep; //從i到j全部數字需花費的最大迭代步數 while(cin >> i >> j) { //統計最大迭代步數 maxstep = 0; for(cur = (i > j ? j : i); cur <= (i > j ? i : j); cur++) { curstep = CollatzStep(cur); maxstep = curstep > maxstep ? curstep : maxstep; } //輸出結果 cout << i << ' ' << j << ' ' << maxstep << endl; } return 0; }
ENDstream