题意:给你一个数,如果是奇数则乘3再+1,如果是偶数,则除以二,反复对该数进行操作使其最后变为一,这个过程中进行操作的次数叫做cycle length.
要求输入范围 i 到 j ,求该范围内的数的cycle length的最大值
代码如下
#include<iostream>
using namespace std;
int main() {
int i, j;
int t,max=0;
while (cin >> i >> j) {
if (i > j) {
t = i;
i = j;
j = t;
}
else if (i == j) return false;
for (int a = i; a <= j; a++) {
int n = a;
int cycle_length = 1;
while(n!=1){
if (n % 2 == 1) n=n * 3 + 1;
else n /= 2;
cycle_length++;
}
if (cycle_length > max) max = cycle_length;
}
cout << i << " " << j << " " << max<<endl;
}
return 0;
}
产生过的错误:在for循环外定义cycle_length,导致最后得到的是所有数的cycle_length的和。
输入测试数据1 10得到的结果是68