題目來源html
卡拉茲(Callatz)猜測:java
對任何一個正整數 n,若是它是偶數,那麼把它砍掉一半;若是它是奇數,那麼把 ( 砍掉一半。這樣一直反覆砍下去,最後必定在某一步獲得 n=1。卡拉茲在 1950 年的世界數學家大會上公佈了這個猜測,傳說當時耶魯大學師生齊動員,拼命想證實這個貌似很傻很天真的命題,結果鬧得學生們無意學業,一心只證 (,以致於有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……ios
咱們今天的題目不是證實卡拉茲猜測,而是對給定的任一不超過 1000 的正整數 n,簡單地數一下,須要多少步(砍幾下)才能獲得 n=1?測試
每一個測試輸入包含 1 個測試用例,即給出正整數 n 的值。spa
輸出從 n 計算到 1 須要的步數。code
3
5
count從0開始,當n!=1時,count++,同時計算n的值,循環結束輸出nhtm
#include <iostream> using namespace std; int main() { int count = 0; int num; cin >> num; while (num != 1) { if (num % 2 == 0) { num /= 2; } else { num = (3 * num + 1) / 2; } count++; } cout << count; return 0; }
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner input = new Scanner(System.in); 6 int n = input.nextInt(); 7 int i = 0; 8 while (n > 1) { 9 if (n % 2 == 0) { 10 n = n / 2; 11 i++; 12 } else if (n % 2 == 1) { 13 n = (3 * n + 1) / 2; 14 i++; 15 } 16 } 17 System.out.println(i); 18 } 19 }