| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3913 人关注过本帖
标题:角谷猜想
只看楼主 加入收藏
小人儿
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-10-31
结帖率:33.33%
收藏
已结贴  问题点数:5 回复次数:6 
角谷猜想
III.角谷猜想
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2。对于计算得到的结果再按照上述规则重复处理,最终总能够得到1。例如,假定初始整数为5,计算过程分别为16、8、4、2、1。编程完成以下内容:
1.    要求输入一个整数,将经过处理得到1的过程输出来;
2.    使用递归函数;
3.    输出结束后,输出递归次数。
如:输入22,则输出11  34  17  52  26  13  40  20  10  5  16  8  4  2  1
     STEP = 15.
#include<stdio.h>
int digui(int n);
int main()
{
    int n,m;
    printf("输入一个整数n:");
        scanf("%d",&n);
        if(n==1)
        {
            printf("%d\n",n);
        }
        else
        {
        m=digui(n);
        printf("%d\n",m);
        }
}
int digui(int n)
{
    while(n!=1)
    {
        if(n%2==0)
            n=n/2;
        else
            n=n*3+1;
        printf("%d\n",n);
    }
                return n;
}
大佬们帮我看看为啥我最后输出的都多一个1啊  谢谢
搜索更多相关主题的帖子: int 输入 整数 输出 printf 
2019-12-04 20:07
Jason_
Rank: 2
来 自:浙江台州
等 级:论坛游民
帖 子:88
专家分:66
注 册:2019-7-14
收藏
得分:3 
程序代码:
else
        {
        m=digui(n);
        printf("%d\n",m);
        }

这里的printf删掉,因为函数digui中已经输出所有的结果了,再加一个输出相当于把最后一个结果多输出了一遍
2019-12-04 20:58
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:3 
题目要求“2. 使用递归函数”,但你根本没用递归呀!
另外,如果n==1,难道不应该是输出0次吗,你怎么输出1次?
题目中的输出是以“空格”间隔,你怎么用的是“换行”作间隔?

程序代码:
#include <stdio.h>

unsigned Collatz( unsigned n, unsigned* step )
{
    if( n <= 1 )
        return n;

    if( step )
        ++*step;

    if( n%2 == 0 )
        n /= 2;
    else
        n = n*3+1;

    printf( "%u%c", n, " \n"[n==1] );
    return Collatz(n,step);
}

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    unsigned step = 0;
    Collatz( n, &step );
    printf( "STEP = %u\n", step );
}

2019-12-05 08:57
maomao12345
Rank: 2
来 自:五位神奇空间
等 级:禁止访问
威 望:2
帖 子:127
专家分:64
注 册:2020-3-23
收藏
得分:0 
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,s;
    cin>>n;
    while(n!=1){
        double p=n*3+1;   
        if(n%2==1){
            cout<<n<<"*3+1="<<p<<endl;
            n=n*3+1;
        }
        if(n%2==0){
            s=n/2;
            cout<<n<<"/2="<<s<<endl;
            n/=2;
        }
    }
    cout<<"End";
    return 0;
}
这是我C1的时候写的代码,别喷

一个快乐的小小孩
2020-03-24 10:22
maomao12345
Rank: 2
来 自:五位神奇空间
等 级:禁止访问
威 望:2
帖 子:127
专家分:64
注 册:2020-3-23
收藏
得分:0 
我没有递归次数,你可以输出一次++。

一个快乐的小小孩
2020-03-24 10:23
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
说的强硬点:你这是递归吗?

2020-03-24 21:01
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
函数中都没有自我调用,怎能达成循环呢?
若不是循环,cnt怎么可能大于1呢

2020-03-24 21:02
快速回复:角谷猜想
数据加载中...
 
   



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

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