100 The 3n + 1 problem

本文解析了一道UVA在线裁判的编程题目,介绍了如何通过编程找出指定范围内数字的最长哈勃序列长度,并提供了完整的C++代码实现。

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

 这题倒没什么难度,有一个坑就是输入的两个数不一定是顺序的,闲着也是闲着,写点uva练练手吧,争取每天一题吧

#include <iostream>

using namespace std;

class CycleNumber
{
public:
	void ComputeCycleNumber(int iStart, int iEnd);
	void OutputResult();
private:
	int m_iStart = 0;
	int m_iEnd = 0;
	int m_iCount = 0;
};

void CycleNumber::ComputeCycleNumber(int iStart, int iEnd)
{
	m_iStart = iStart;
	m_iEnd = iEnd;
	if (iStart > iEnd)
	{
		swap(iStart, iEnd);
	}
	m_iCount = 0;
	for (int i = iStart; i <= iEnd; ++i)
	{
		int iNumber = i;
		int iCount = 1;
		while (iNumber != 1)
		{
			if (iNumber & 1 == 1)
			{
				iNumber = iNumber * 3 + 1;
			}
			else
			{
				iNumber /= 2;
			}
			++iCount;
		}
		if (m_iCount <= iCount)
		{
			m_iCount = iCount;
		}
	}
}


void CycleNumber::OutputResult()
{
	cout << m_iStart << " " << m_iEnd << " " << m_iCount << endl;
}

int main()
{
	int iStart = 0;
	int iEnd = 0;
	CycleNumber cycleNumber;
	while (cin >> iStart >> iEnd)
	{
		cycleNumber.ComputeCycleNumber(iStart, iEnd);
		cycleNumber.OutputResult();
	}
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值