信息学奥赛一本通 1086:角谷猜想 | OpenJudge NOI 1.5 21

这篇博客介绍了角谷猜想的程序解决方法,包括两种不同的输出算式的方式:使用`cout`和`printf`。代码中使用了`long long`类型以防止在不断乘3加1的过程中数值超出`int`的范围。题目要求对于输入的数字n,通过循环判断n是否为奇数或偶数,并相应地进行乘3加1或除以2的操作,直至n变为1,输出整个计算过程。
摘要由CSDN通过智能技术生成

【题目链接】

ybt 1086:角谷猜想
OpenJudge NOI 1.5 21:角谷猜想

【题目考点】

1. while循环

【解题思路】

  • 设变量n
  • 判断n是否是奇数
    • 如果n是奇数,那么将n乘3加1,即n = n * 3 + 1;,并输出算式。
    • 如果n是偶数,那么将n除以2,即n /= 2;,并输出算式。
  • 判断n是否为1,如果是,那么跳出循环。如果不是,继续循环,判断n是否是奇数。
∙ \bullet 注意:

虽然题目中限定 n <= 2000000,但是n在不断乘3加1的过程中,n的值可能会超出int型可表示的范围,因此本题中变量n必须设为long long类型。

【题解代码】

解法1:使用cout输出算式
#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n;//不断乘3+1的过程中,数值会超出int的范围,因而得用long long类型 
    cin>>n;
    while(n != 1)
    {
    	if(n % 2 == 1)//如果n是奇数
    	{
    		cout<<n<<"*3+1="<<n * 3 + 1<<endl;
    		n = n * 3 + 1;
		}
		else
		{
			cout<<n<<"/2="<<n / 2<<endl;
			n /= 2;
		}
    }
	cout<<"End";
    return 0;
}
解法2:使用printf输出算式
#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n;//不断乘3+1的过程中,数值会超出int的范围,因而得用long long类型 
    cin>>n;
    while(n != 1)
    {
    	if(n % 2 == 1)
    	{
    	    printf("%ld*3+1=%ld\n", n, n * 3 + 1);
    		n = n * 3 + 1;
		}
		else
		{
		    printf("%ld/2=%ld\n", n, n / 2);
			n /= 2;
		}
    }
	cout<<"End";
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值