HDOJ 1032:一個有關3n+1問題的題目

題目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1032php

1、題目要求ios

1)給出一個正整數n,若是n爲奇數,則n=3n+1,不然n=n/2函數

2)設數n按1)中的運算方式,最少通過CollatzStep(n)次運算可以變成1spa

3)現給出兩個正整數i和j,問數i和j之間全部數字裏函數CollatzStep(n)可取到的最大值code

須要注意的是:ci

1)i與j的大小關係是不必定的get

2)最後輸出結果時數字i和j須要按照順序輸出io

2、程序代碼class

#include<iostream>

using namespace std;

//計算一個正整數通過奇偶歸一猜測多少步能夠到1
int CollatzStep(int n)
{
    int step = 1;
    while(n != 1)
    {
        if(n % 2)
        {
            n = 3 * n + 1;
        }
        else
        {
            n /= 2;
        }
        step++;
    }
    return step;
}

int main()
{
    int i, j, cur; //最小值i,最大值j,cur用來進行從i到j的遍歷
    int temp;      //臨時變量
    int curstep;   //數字cur迭代到1所花費的步數
    int maxstep;   //從i到j全部數字需花費的最大迭代步數

    while(cin >> i >> j)
    {
        //統計最大迭代步數
        maxstep = 0;
        for(cur = (i > j ? j : i); cur <= (i > j ? i : j); cur++)
        {
            curstep = CollatzStep(cur);
            maxstep = curstep > maxstep ? curstep : maxstep;
        }

        //輸出結果
        cout  << i << ' ' << j << ' ' << maxstep << endl;    
    }
    
    return 0;
}

ENDstream

相關文章
相關標籤/搜索