Manchester


私信TA

用户名:wenyajie

访问量:312867

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62755
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路

1.输入两个整数,a,b,然后输出这两个数,每个后面都要有一个空格符;(以文件结束符结束)

2.如果a>b,交换这两个数;

3.判断从a到b的每一个数 i(包括a,b),(1)如果i为奇数i=i*3+1,如果为偶数i=i/2;直到i==1时停止;

4.同时记录下(1)过程循环的次数x,用一个变量max记录所有 a~b,过程次数最高的值,每一个i比较一次,如果x>max,max=x;

5.输出max,加换行符;




注意事项:
每次输入新的一组数后都要置max=0;

要在交换a b 之前输出a b;

可以用递归,测试数据其实没有超过1000000,亲测,安稳:

#include <stdio.h>
void maxcycle( int n, int x );


int max = 0;
/*--------------------------------------------------*/
int main()
{
    int a, b;

    while ( scanf( "%d%d", &a, &b ) != EOF )
    {
        max = 0;
        printf( "%d %d ", a, b );  //输出 a ,b
        if ( a > b )                       //交换
        {
            a += b; b = a - b; a -= b;
        }

        for ( int i = a; i <= b; i++ )
            maxcycle( i, 0 );            //执行过程

        printf( "%d\n", max + 1 );       //输出
    }
    return(0);
}


/*-------------------------------------------------*/
void maxcycle( int n, int x )
{
    if ( n == 1 )
    {
        if ( x > max )
            max = x;
        return;
    }else
    if ( n % 2 != 0 )
    {
        n = n * 3 + 1;
    }else
    if ( n % 2 == 0 )
    {
        n /= 2;
    }
    x++;
    maxcycle( n, x );
    return;
}
参考代码:


#include <stdio.h>
void maxcycle( int n, int x );


int max = 0;
/*---------------------------------------------------*/
int main()
{
    int a, b;

    while ( scanf( "%d%d", &a, &b ) != EOF )
    {
        max = 0;
        printf( "%d %d ", a, b );
        if ( a > b )
        {
            a += b; b = a - b; a -= b;
        }

        for ( int i = a; i <= b; i++ )
            maxcycle( i, 0 );

        printf( "%d\n", max + 1 );
    }
    return(0);
}


/*-----------------------------------------------------*/
void maxcycle( int n, int x )
{
    while ( n > 1 )
    {
        if ( n % 2 != 0 )
        {
            n = n * 3 + 1;
        }else
        if ( n % 2 == 0 )
        {
            n /= 2;
        }
        x++;
    }


    if ( x > max )
        max = x;

    return;
}

别忘点赞哦-.-

 

0.0分

5 人评分

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

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

代码解释器

代码纠错

SQL生成与解释

  评论区

你测过 
1 1000000 么?
2019-07-01 09:19:27
为什么一定要在交换a、b前输出a、b?最后输出系统就提示错误33%
2019-05-24 20:18:17
  • «
  • 1
  • »