zoukankan      html  css  js  c++  java
  • 每日一九度之 题目1031:xxx定律

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:6870

    解决:4302

    题目描述:
        对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。
        请计算需要经过几步才能将n变到1,具体可见样例。
    输入:
        测试包含多个用例,每个用例包含一个整数n,当n为0 时表示输入结束。(1<=n<=10000)
    输出:
        对于每组测试用例请输出一个数,表示需要经过的步数,每组输出占一行。
    样例输入:
    3
    1
    0
    样例输出:
    5
    0

    挺简单的一道模拟题,但是也可以用数学方法计算出n与次数的关系式(可以自己尝试下)。

    //Asimple
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <cctype>
    #include <cstdlib>
    #include <stack>
    #include <cmath>
    #include <map>
    #include <string>
    #include <queue>
    #define INF 100000
    using namespace std;
    const int maxn = 1005;
    typedef long long ll;
    int n;
    
    int fun(int n, int cnt){
        if( n == 1 ) return cnt;
        else if( n & 1 ){
            n = 3 * n + 1 ;
            n /= 2 ;
            fun(n,cnt+1);
        } else {
            n /= 2 ;
            fun(n,cnt+1);
        }
    }
    
    int main(){
        while( scanf("%d",&n) && n ){
            int cnt = 0;
            cout << fun(n,cnt) << endl ;
        }
        return 0;
    }
    低调做人,高调做事。
  • 相关阅读:
    Android Studio 打包生成apk
    找水王
    关于搜狗输入法的用户体验评价
    c语言函数的嵌套使用和矩阵运算
    人月神话阅读笔记02
    第一阶段冲刺意见评论汇总
    高校表白App-团队冲刺第十天
    高校表白App-团队冲刺第九天
    高校表白App-团队冲刺第八天
    人月神话阅读笔记01
  • 原文地址:https://www.cnblogs.com/Asimple/p/5865469.html
Copyright © 2011-2022 走看看