解题思路
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 人评分
不容易系列2 (C语言代码)浏览:589 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:1078 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:512 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:533 |
1908题解浏览:633 |
敲七 (C语言代码)浏览:2699 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
上车人数 (C语言代码)浏览:710 |
10月月赛题解浏览:536 |
简单的a+b (C语言代码)浏览:547 |