原题链接:The 3n + 1 problem
题意:
1、对于整数n,如果n是偶数,则除以2。如果n是奇数,乘以3加1,当n=1时终止。
2、输入:整数i和j
3、循环长度是指在1之前(包括1)生成的数。
3、输出:输出i和j的顺序与i和j之间的整数的最大循环长度,三个数字用一个空格分
4、有多组输入输出
5、All integers will be less than 1,000,000 and greater than 0.
具体代码:
#include<stdio.h>
int main()
{
int i, j, t;
while (scanf("%d %d", &i, &j) != EOF)
{
printf("%d %d ", i, j);//输完直接打印如果后面不再要求输入
if (i > j)
{
t = i;
i = j;
j = t;
}
int c = 1;//开始值为一,注意可以自己带几个值进去看看
int max = 0;//
for (int p = i; p <= j; p++)
{
int c = 1;
long long temp = p;//这里要定义一个临时变量,防止把p的值搞乱掉
while (temp != 1)
{
if (temp % 2 == 0)
temp /= 2;
else
temp = temp * 3 + 1;//temp的值可能越界定义longlong型
c++;//
}
if (max < c)//选出一系列数中的最大值,不用把每个数都存起来,然后从大到小排序
max = c;//直接定义一个最大值,然后依次比较,遇到大的覆盖即可
c=1;//c重新赋值或者把int c=1;写到循环体里面
}
printf("%d\n", max);
}
return 0;
}
6 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复