蓝桥杯 1095:The 3n+1 problem

题目描述

Consider the following algorithm to generate a sequence of numbers. Start with an integer n. If n is even, divide by 2. If n is odd, multiply by 3 and add 1. Repeat this process with the new value of n, terminating when n = 1. For example, the following sequence of numbers will be generated for n = 22: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 It is conjectured (but not yet proven) that this algorithm will terminate at n = 1 for every integer n. Still, the conjecture holds for all integers up to at least 1, 000, 000. For an input n, the cycle-length of n is the number of numbers generated up to and including the 1. In the example above, the cycle length of 22 is 16. Given any two numbers i and j, you are to determine the maximum cycle length over all numbers between i and j, including both endpoints.

输入

The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.

输出

For each pair of input integers i and j, output i, j in the same order in which they appeared in the input and then the maximum cycle length for integers between and including i and j. These three numbers should be separated by one space, with all three numbers on one line and with one line of output for each line of input.

样例输入

1 10
100 200
201 210
900 1000

样例输出

1 10 20
100 200 125
201 210 89
900 1000 174

实现代码:

#include <iostream>

using namespace std;
int main() {
    int i, j,add1;

    while (cin >> i >> j) {
        cout  << i << ' ' << j << ' ';
        int add = 0;
        if (j < i) {
            int a;
            a = j;j = i;i = a;
        }//如果j小,调换位置。
        
        for (int x = i; x <= j; x++) {
            add1 = 1;//将每个数字的猜想初值设为1
            int y = x;
            //cout << y<<j;
            while (y != 1) {
                if (y % 2 == 1) y = 3 * y + 1;
                else y = y / 2;
                add1++;
            }//进行3n+1猜想

            if (add1 > add) add = add1;
        }//查找最大数字
        cout <<add<<endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42082542/article/details/86765764
今日推荐