渴望学到知识的菜鸟


私信TA

用户名:ldhskd

访问量:30291

签 名:

这小伙子人行,能处!

等  级
排  名 115
经  验 7666
参赛次数 1
文章发表 48
年  龄 18
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

    题目:

考虑以下生成数字序列的算法。从整数n开始,如果n是偶数,除以2。如果n是奇数,乘以3再加1。用新值n重复这个过程,直到n = 1。例如,下面的数字将生成序列n = 22: 22日11 34 17 52 26 13 40 20 10 5 16 8 4 2 1推测(但尚未证实),该算法将终止在每个整数n (n = 1)。然而,所有整数的猜想持有至少1,000,000。对于输入n,循环长度n是生成的数的个数,直到并包括1。在上面的例子中,22的周期长度是16。给定任意两个数字i和j,要确定i到j之间所有数字(包括两个端点)的最大周期长度。


输入将由一系列整数对i和j组成,每行一对整数。所有整数都小于1,000,000且大于0。


对于每一对输入整数i和j,输出i, j在相同的顺序出现在输入然后最大周期长度之间的整数,包括我和j。这三个号码应该由一个空间,与所有三个数字在一行,一行输出输入的每一行。


【来自有道翻译】




大致意思就是,输入两个数,a,b然后找到a,b之间的最大序列数,

例如:

10 : 10 5 16 8 4 2 1            有7个数

9 : 9 28 14 7 22 11 34 17  52  26 13 40 20 10 5 16 8 4 2 1        有20个数

8 : 8  4  2  1   有4个数


所以

输入 10   8  的话,那10 和 8之间的最大序列数应该是9 的,有20个,   所以 10 到 8 之间的最大序列数为 20



理解了这些之后就好办了



参考代码:

#include <stdio.h>
int main()
{
    int a, b, max, min, now;//now表示现在的序列数的个数
    while (~scanf("%d%d", &a, &b))
    {
        printf("%d %d ", a, b);
        max = a > b ? a : b;
        min = a < b ? a : b;//找到a,b之间的最大的数
        int max_number = 0;//最大的个数
        for (int i = min, temp = min; i <= max; temp = ++i )//temp是用来临时保存i的值,避免i的值被弄乱
        {                                                   //temp = ++i 表示i先加1,然后再把i赋值给temp,可以拆分为:①i++;②temp = i;
            now = 1;//一开始原本的数是序列中的第一个数
            while (temp != 1)
            {
                if (temp & 1)
                    temp = temp * 3 + 1;
                else
                    temp /= 2;
                now++;
            }
            max_number = max_number > now ? max_number : now;
        }
        printf("%d\n", max_number);
    }
    return 0;
}


 

0.0分

8 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#include<stdio.h>
int main()
{
    int i,n,j,max=0,count;
    long long k;
    while(scanf("%d %d",&i,&j)!=EOF)
    {
    for(n=i;n<=j;n++)
    {   k=n;
        count=1;
        while(k!=1)
        {
            if(k%2==0)
            {   count++;
                k/=2;
            }
            else
            {   count++;
                k=k*3+1;
            }

        }
        if(max<=count)
        {
            max=count;
        }
    }
    printf("%d %d ",i,j);
    printf("%d ",max);
    }
    return 0;
}
这样怎不行
2021-11-21 14:24:00
为什么max-number定义在外面就错了
2021-11-07 15:20:00
好棒,向你学习
2021-10-31 18:53:35
  • «
  • 1
  • »