zoukankan      html  css  js  c++  java
  • PAT-1001. 害死人不偿命的(3n+1)猜想 (15)

    卡拉兹(Callatz)猜想:

    对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

    我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?

    输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。

    输出格式:输出从n计算到1需要的步数。

    输入样例:

    3
    

    输出样例:

    5
    

     //c++

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

    //C

     1 #include <stdio.h>
     2 int main(){
     3   int n, step=0;
     4   scanf("%d", &n);
     5   while(n!=1){
     6     if(n%2==0)n=n/2;
     7     else n = (3*n+1)/2;
     8     step++;
     9   }
    10   printf("%d
    ", step);
    11   return 0;
    12 }
  • 相关阅读:
    WebAPI 资料
    TransactionScope事务类的使用
    Go入门笔记34-Go 使用Ioctl
    解决XShell XFTP传输Go可执行文件导致出错问题
    Go入门笔记33-Go 交叉编译
    博客园添加横向菜单
    C# 正则替换、Json格式化等
    Ubuntu批量修改文件后缀
    Linux免密登录
    Go入门笔记32-继承
  • 原文地址:https://www.cnblogs.com/boluo007/p/6757315.html
Copyright © 2011-2022 走看看