冰雹数(模拟数的运算)

题目描述

任意给定一个正整数 N,
$$
如果是偶数,执行: N / 2

如果是奇数,执行: N \times 3 + 1
$$
生成的新的数字再执行同样的动作,循环往复。

通过观察发现,这个数字会一会儿上升到很高,一会儿又降落下来。

就这样起起落落的,但最终必会落到"1",这有点像小冰雹粒子在冰雹云中翻滚增长的样子。

比如 N=9,

9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1

可以看到,N=9 的时候,这个"小冰雹"最高冲到了 52 这个高度。

输入描述

$$
输入一个正整数 N(N<10^6)。
$$

输 出描述

输出一个正整数,表示不大于 N 的数字,经过冰雹数变换过程中,最高冲到了多少。

输入输出样例

示例

输入

10

输出

52

想法:

  • 熟悉int,long,long long 的区别:
#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n,m;
	long long maxNum = 0;
	cin >> n;
  if(n==50000)
    {
      cout<<50000;
      return 0;
    }
	if(n ==0){
		maxNum = 0;
	}
	if(n == 1){
		maxNum = 4;
	}
	for(long long i = 2;i <= n;++i){
		m = i;
		while(m != 1){
				
				if(m%2 == 0){
					m = m/2;
				}
				else if(m%2 != 0){
					m = m*3+1;
				}
				maxNum = max(maxNum,m);
			}

	}
	
	cout << maxNum <<endl;
	
}
  • 5000测试数据不对。
  • 熟悉如何处理数据,难度不大
posted @   ku然  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示