| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:卡拉兹问题:转换步骤怎么对不上呢?
只看楼主 加入收藏
油炸冰溜子
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2014-7-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
卡拉兹问题:转换步骤怎么对不上呢?
小弟偶然发现克拉兹问题,有点兴趣,就看了一下。
原题是:
克拉兹问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。
  问题如下:
  (1)输入一个正整数n;
  (2)如果n=1则结束;
  (3)如果n是奇数,则n变为3n+1,否则n变为n/2;
  (4)转入第(2)步。
例如:
输入13的时候,经历10步可以达到1:
13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
输入22,经历16步可以达到1:
22 -> 11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
我怎么看都是:输入13的时候是9步转换,22是15步转换。
谁能帮我解答一下啊。
搜索更多相关主题的帖子: 正整数 克拉 卡拉 数学 
2014-08-07 15:11
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
收藏
得分:10 
本来输入13的时候是10步转换,22是16步转换,你输入13或22之后还要判断是否为1,是否为奇数,这也是第一步。

只要心是晴朗的,人生就没有雨天。
2014-08-08 08:52
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:10 

#include<stdio.h>
void main()
{
    int n,count=0;
    printf("请输入一个自然数: ");
    scanf("%d",&n);
    do{
        if(n%2)
        {
            n=n*3+1;
            printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n);
        }
        else
        {
            n/=2;
            printf("[%d]:%d/2=%d\n",++count,2*n,n);
        }
    }while(n!=1);
}

请输入一个自然数: 13
[1]:13*3+1=40
[2]:40/2=20
[3]:20/2=10
[4]:10/2=5
[5]:5*3+1=16
[6]:16/2=8
[7]:8/2=4
[8]:4/2=2
[9]:2/2=1
Press any key to continue

请输入一个自然数: 22
[1]:22/2=11
[2]:11*3+1=34
[3]:34/2=17
[4]:17*3+1=52
[5]:52/2=26
[6]:26/2=13
[7]:13*3+1=40
[8]:40/2=20
[9]:20/2=10
[10]:10/2=5
[11]:5*3+1=16
[12]:16/2=8
[13]:8/2=4
[14]:4/2=2
[15]:2/2=1
Press any key to continue
2014-08-08 14:45
油炸冰溜子
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2014-7-30
收藏
得分:0 
谢谢各位,明白了
2014-08-08 15:11
快速回复:卡拉兹问题:转换步骤怎么对不上呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025621 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved