| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 669 人关注过本帖
标题:求大神指导,本人初学 c。
只看楼主 加入收藏
乖乖0943
Rank: 2
等 级:论坛游民
帖 子:33
专家分:42
注 册:2014-8-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
求大神指导,本人初学 c。
(1)输入一个正整数n;   
(2)如果n=1则结束;   
(3)如果n是奇数,则n变为3n+1,否则n变为n/2;   
(4)转入第(2)步。
    举一个例子:n=13的时候,经历10步可以达到1。
        13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
请问10000以内,哪个数变为1需要转化的步骤多
以上是题目,可是我不知道怎么计算循环的次数。以下是我自己写的代码,但是统计不了次数,我不知道该怎么改。
程序代码:
#include<stdio.h>
int main()
{
    int n,p;
    int count=1;
    printf("输入一个整数n:");
    scanf("%d",&n);
    if(n==1)
    {
        printf("n=%d",n);
    }
    do
    {
        switch(p=n%2)
        {
        case 0:
            n=n/2;break;
        case 1:
            n=3*n+1;break;
        }
        printf("n=%d",n);
        printf("\n");
    }
    while(n!=1);        
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 正整数 统计 
2014-08-07 18:03
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
收藏
得分:10 
克拉兹问题
#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    int count=0;
    printf("输入一个整数n:");
    scanf("%d",&n);
    while(1<n)
    {
        if(n%2==1)
        {
            n=3*n+1;
            printf("n=%d",n);
         printf("\n");
    }
        else
        {
            n=n/2;
            printf("n=%d",n);
         printf("\n");
        }
        count++; //循环次数
        if(n==1) break;
    }
         printf("n=%d",n);
         printf("\n");
         printf("count=%d\n",count);
    return 0;
}



你的程序的switch()选择语句没有用,没有选择。

[ 本帖最后由 龙牙 于 2014-8-7 19:10 编辑 ]

只要心是晴朗的,人生就没有雨天。
2014-08-07 18:38
乖乖0943
Rank: 2
等 级:论坛游民
帖 子:33
专家分:42
注 册:2014-8-1
收藏
得分:0 
回复 2 楼 龙牙
恩呢,谢谢,这个统计次数的我看懂了,不过怎么统计得出转换步骤最多的那个数字?可以也教教我么?
2014-08-07 21:32
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
收藏
得分:0 
回复 3 楼 乖乖 0943
这个我还没有搞清,你问问斑竹。

只要心是晴朗的,人生就没有雨天。
2014-08-07 21:37
jsaf
Rank: 2
等 级:论坛游民
帖 子:7
专家分:12
注 册:2014-8-7
收藏
得分:0 
回复 3 楼 乖乖 0943
这个应该是要用到数组吧
2014-08-07 22:48
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
哎呀妈呀乖乖,极度的高端大气上档次呀

梦想拥有一台龙芯3A-4000
2014-08-07 23:39
jsaf
Rank: 2
等 级:论坛游民
帖 子:7
专家分:12
注 册:2014-8-7
收藏
得分:10 
回复 楼主 乖乖 0943
#include<stdio.h>
#include<math.h>
int main()
{
    int n,a[10000],max=2,i;   
    for(i=2;i<10000;i++)
    {n=i;a[i]=0;
    while(n!=1)
    {
        if(n%2==1)
        { n=3*n+1;}
        else
        {n=n/2;}
        a[i]++; //循环次数     
    }   
    }
   
    for(i=2;i<10000;i++)
    {
        if(a[max]<a[i])  max=i;      //寻找循环次数最大的数
    }
    printf("%d\n",max);
    printf("%d\n",a[max]);
}

这个是找到循环次数最多的那个数和循环的次数
2014-08-07 23:42
乖乖0943
Rank: 2
等 级:论坛游民
帖 子:33
专家分:42
注 册:2014-8-1
收藏
得分:0 
回复 4 楼 龙牙
恩呢,好的,谢谢
2014-08-08 09:25
乖乖0943
Rank: 2
等 级:论坛游民
帖 子:33
专家分:42
注 册:2014-8-1
收藏
得分:0 
回复 7 楼 jsaf
谢谢了啊。我看懂了!
2014-08-08 09:32
imlwg
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2014-8-5
收藏
得分:0 
回复 7 楼 jsaf
用数组太浪费了,建议在每次循环后加入一项判定,把每次循环求出的步数另存一个变量,同时另存该步数对应的值,下次循环后和先前的另存步数比较,如果步数更大就替换掉步数及对应值,如果小于另存步数则继续循环,这样另存的步数始终是最大的。循环结束后最大步数就是另存变量的值,对应该值的循环数也同时有了。
2014-08-08 18:41
快速回复:求大神指导,本人初学 c。
数据加载中...
 
   



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

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