问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
请考虑以下算法以生成数字序列。以整数 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 的顺序与它们在输入中出现的顺序相同,然后是 i 和 j 之间整数的最大循环长度。这三个数字应用一个空格分隔,所有三个数字都在一行上,每行输入都有一行输出。
样例输入
1 10
100 200
201 210
900 1000
样例输出
1 10 20
100 200 125
201 210 89
900 1000 174
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int shzi(int x, int y);
int main()
{
int i, j = 0;
while (~scanf("%d %d", &i, &j))//while (scanf("%d%d",&n,&m)!=EOF)也是为了没有输入时跳出循环。
{
shzi(i, j);
printf("%d %d %d", i, j, shzi(i, j));
}
return 0;
}
int shzi(int x, int y)
{
int i = 0;
int count = 0;
int maxcount = 0;
if (y < x)
{
int temp = 0;
temp = x;
x = y;
y = temp;
}
for (i = x; i <= y; i++)
{
int p = i;//保存i变量,不然后面i值变化了就没办法正常for循环了
if (i == 1)//当i=1时不进入循环所以没办法算一次
{
count++;
}
else
{
while (i != 1)
{
if (i % 2 == 0)
{
i = i / 2;
}
else
{
i = i * 3 + 1;
}
count++;
}
count++;//i也算一次,但是while循环会忽略i
}
if (maxcount < count)
{
maxcount = count;
}
i = p;//赋值给i,继续正常循环
count = 0;//清零,避免count一直加。才可以准确计算每个i的count
}
return maxcount;
}