卡拉兹(Callatz)猜想:
对任何一个正整数1001 害死人不偿命的(3n 1)猜想 (15 分) - 图1,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把1001 害死人不偿命的(3n 1)猜想 (15 分) - 图2#card=math&code=%283n%2B1%29&id=SOLlC)砍掉一半。这样一直反复砍下去,最后一定在某一步得到1001 害死人不偿命的(3n 1)猜想 (15 分) - 图3。卡拉兹在1001 害死人不偿命的(3n 1)猜想 (15 分) - 图4年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证1001 害死人不偿命的(3n 1)猜想 (15 分) - 图5#card=math&code=%283n%2B1%29&id=WIrkJ),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1001 害死人不偿命的(3n 1)猜想 (15 分) - 图6的正整数1001 害死人不偿命的(3n 1)猜想 (15 分) - 图7,简单地数一下,需要多少步(砍几下)才能得到1001 害死人不偿命的(3n 1)猜想 (15 分) - 图8

输入格式:

每个测试输入包含1001 害死人不偿命的(3n 1)猜想 (15 分) - 图9个测试用例,即给出正整数1001 害死人不偿命的(3n 1)猜想 (15 分) - 图10的值。

输出格式:

输出从1001 害死人不偿命的(3n 1)猜想 (15 分) - 图11计算到1001 害死人不偿命的(3n 1)猜想 (15 分) - 图12需要的步数。

输入样例:

  1. 3

输出样例:

  1. 5

简单水题(C++)

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. int n,count=0;
  5. cin>>n;
  6. while(n!=1) {
  7. if(n%2!=0) n=3*n+1;
  8. n=n/2;
  9. count++;
  10. }
  11. cout<<count;
  12. return 0;
  13. }

其他写法(C++)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using gg = long long;
  4. int main() {
  5. ios::sync_with_stdio(false);
  6. cin.tie(0);
  7. gg ni, ans = 0;
  8. cin >> ni;
  9. for (; ni != 1; ++ans) {
  10. if (ni % 2 == 1) {
  11. ni = 3 * ni + 1;
  12. }
  13. ni /= 2;
  14. }
  15. cout << ans;
  16. return 0;
  17. }