【发布时间】:2018-04-06 15:08:03
【问题描述】:
给出了一些整数n。如果 n 是奇数,则执行 3 n+1 和 n / 2 如果 n 是偶数的任务。当 n 达到 1 时完成工作。在 n 达到 1 之前创建的数字称为循环长度。当两个数 I 和 j 试图获得 I 和 j 之间所有数的最大循环长度。 有没有不写全局变量的情况下比较循环长度的方法?
#include<stdio.h>
void cycle(int num) {
int count = 1;
while (1)
{
if (num == 1)
break;
if (num % 2 == 1) {
num = 3 * num + 1;
count++;
printf("%d ", num);
}
else {
num = num / 2;
count++;
printf("%d ", num);
}
}
printf("\ncycle-length : %d\n", count);
}
void cycle_count(int num1,int num2) {
int num;
for (num = num1; num <= num2; num++)
{
cycle(num);
}
}
void main()
{
int num1, num2;
scanf("%d %d", &num1,&num2);
cycle_count(num1, num2);
return;
}
【问题讨论】:
-
你的函数都是
void类型的。如果您将它们设为int类型(无论如何都应该是main),您可以将一个值传回给调用者。 -
如将结果存储到数组中而不是立即打印?
-
@usr2564301 只需要保存起始条件和最大循环长度即可。
-
代码的意义何在?它是否有效?如果不是,为什么不呢?你到底在问什么?您询问全局变量,但您没有定义。
-
这是
Collatz sequence。有了这句话,你应该可以在网上找到无数的资源。