0
点赞
收藏
分享

微信扫一扫

PAT甲级——1001 害死人不偿命的(3n+1)猜想

seuleyang 2022-01-21 阅读 60
算法

问题描述

输入格式

输出格式

输入样例

输出样例

解题

简单题,给出两种解法。
一、考虑循环

#include<stdio.h>

int feet_num(int n){
    //计数
    int i = 0;
    //while(true)编译通不过,故用1
    while(1){
        //n == 1时跳出循环
        if (n == 1)
            break;
        //n为偶数
        if (n % 2 == 0){
            n /= 2;
            i++;
        }
        //n为奇数
        else{
            n = (3 * n + 1) / 2;
            i++;
        }
    }
    return i;
}

int main()
{
    int i;
    scanf("%d", &i);
    printf("%d", feet_num(i));
    
    return 0;
}

二、考虑递归

#include<stdio.h>

int feet_num(int n){
	//n == 1 为递归结束条件
    if (n == 1)
        return 0;
    //n为偶数时
    if (n % 2 == 0)
        return 1 + feet_num(n / 2);
    //n为奇数时
    else
        return 1 + feet_num((3 * n + 1) / 2);
}

int main()
{
    int i;
    scanf("%d", &i);
    printf("%d", feet_num(i));
    
    return 0;
}

总结

通常情况下,递归的效率会低,但其算法更抽象,更容易理解。

举报

相关推荐

0 条评论