请考虑以下算法来生成数字序列。从整数 n 开始。如果 n 为偶数则除以 2。如果 n 是奇数则乘以 3 并加 1。使用新值 n 重复此过程当 n = 1 时终止。输入将由一系列整数对 i 和 j 组成每行一对整数。所有整数都将小于 1000000 且大于 0。对于每对输入整数 i 和 j按照它们在输入中出现的顺序输出 i、j然后输出 i 和 j 之间的整数的最大周期长度。这三个数字应该用一个空格分
实现如下:
#include <stdio.h>
int main() { int i, j; while (scanf("%d %d", &i, &j) != EOF) { // 循环读入整数对 int max_cycle = 0; for (int k = i; k <= j; k++) { // 遍历 i 到 j 中的每个数 int n = k; int cycle = 1; // 记录周期长度 while (n != 1) { if (n % 2 == 0) { n /= 2; } else { n = n * 3 + 1; } cycle++; } if (cycle > max_cycle) { max_cycle = cycle; } } printf("%d %d %d\n", i, j, max_cycle); // 输出结果 } return 0;
原文地址: https://www.cveoy.top/t/topic/hhSu 著作权归作者所有。请勿转载和采集!