3n+1

本文介绍了一个关于3n+1猜想的C++程序实现,该猜想指出对于任意大于1的自然数n,通过特定变换最终都能回到1。程序演示了如何计算从给定的n到1所需的变换步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如3->10->5->16->8->4->2->1。

 
输入n ,输出n变换的次数。N<=1000000000

 

输入

输入一个N

输出

输出n变为1的次数

样例输入

3

样例输出

7

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string.h>
using namespace std;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int num=0;
        long long int tem;
        tem = n;
        while(tem>1)
        {
            if(tem%2!=0) tem = 3*tem+1;
            else tem/=2;
            num++;
        }
        printf("%d\n",num);
    }
    return 0;
}

这里要注意的是在while循环里使用long long int 类型的数据代替了n进入了while循环,因为在执行while循环的时候数据是会溢出的,注意最大数据取到了N<=1000000000,这会超过int型数据的范围

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值