首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collatz算法

Collatz算法
EN

Stack Overflow用户
提问于 2014-11-27 17:53:30
回答 1查看 225关注 0票数 0

下一段代码显示低于100的正整数使用Collatz算法到达第一个1所需的步骤数:

代码语言:javascript
复制
#include <stdio.h>
int main ()
{
    int i, num;
    int pasos;
    for(i=2;i<=100;i++){
        pasos=0;
        num=i;
        while(num!=1){
            if(num%2 == 0){
                num = num/2;
                pasos=pasos+1;
            }
            else
            {
                num = num*3 + 1;
                pasos=pasos+1;
            }
        }
        printf("\n");
        printf("El numero de pasos para llegar a 1 desde %i fueron: %i",i,pasos);
    }

我知道97是低于100的数字,需要最大的步骤(118)才能到达前1,但是我如何使程序显示这个最大的数字而不是在程序输出中寻找它呢?我希望你能理解,英语不是我的第一语言。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-27 19:12:08

例如,作为收集最大数目的一种方法,您可以简单地在ternary循环之后添加一个while表达式:

代码语言:javascript
复制
#include <stdio.h>

int main () {
    int i=0, num=0;
    int pasos=0, maxpasos=0;;
    for (i = 2; i <= 100; i++) {
        pasos = 0;
        num = i;
        while (num != 1) {
            if (num % 2 == 0) {
                num = num / 2;
                pasos = pasos + 1;
            }

            else {
                num = num * 3 + 1;
                pasos = pasos + 1;
            }
        }
        maxpasos = (pasos > maxpasos) ? pasos : maxpasos;
        printf ("\n");
        printf ("El numero de pasos para llegar a 1 desde %i fueron: %i", i,
                pasos);
    }
    printf ("\n\nMaxpasos : %d\n\n", maxpasos);
    return 0;
}

输出:

代码语言:javascript
复制
./bin/collatzmax

El numero de pasos para llegar a 1 desde 2 fueron: 1
El numero de pasos para llegar a 1 desde 3 fueron: 7
El numero de pasos para llegar a 1 desde 4 fueron: 2
(snip)
El numero de pasos para llegar a 1 desde 99 fueron: 25
El numero de pasos para llegar a 1 desde 100 fueron: 25

Maxpasos : 118

如果您还需要在i发生时存储它,只需添加一个变量int imax=0;,然后当您存储maxpaso时,也可以存储imax=i;。示例:

代码语言:javascript
复制
int i=0, num=0, imax=0;
...
    // maxpasos = (pasos > maxpasos) ? pasos : maxpasos;
    if (pasos > maxpasos) {
        maxpasos = pasos;
        imax = i;
    }

输出:

代码语言:javascript
复制
Maxpasos (at 97): 118
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27176536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档