2016年省赛真题c/c++ c组 第八题冰雹数

简介: 2016年省赛真题c/c++ c组 第八题冰雹数

题目:


冰雹数
任意给定一个正整数N,
如果是偶数,执行: N / 2
如果是奇数,执行: N * 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<1000000)
输出格式:
一个正整数,表示不大于N的数字,经过冰雹数变换过程中,最高冲到了多少。
例如,输入:
10
程序应该输出:
52
再例如,输入:
100
程序应该输出:
9232
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include < xxx>, 不能通过工程设置而省略常用头文件。


提交时,注意选择所期望的编译器类型。


代码:


#include <cstdio>
long long change(long long n)
{
  long long max = 0;
  while(n!=1)
  {
  if(n%2==0) n = n/2;
  else n = n*3+1;
  //printf("%lld ",n);
  if(n>max)
    max = n;
  }
  return max;
}
int main()
{
  int n;
  scanf("%d",&n);
  long long max = 0;
  for(long long i=1;i<=n;i++){   //列举1-n的所有生成的情况
  long long ret = change(i);
  if(ret>max)
    max = ret;
  } 
  printf("%lld",max);
  return 0;
}


本题注意点:就是大数,给出的n是从1到n之间冰雹达到的最大数,而不是就是一个n,注意用的数据类型的范围,要用到long long


数据类型范围:




相关文章
|
人工智能 C++
2017年第八届C/C++ B组蓝桥杯省赛真题
2017年第八届C/C++ B组蓝桥杯省赛真题
2017年第八届C/C++ B组蓝桥杯省赛真题
|
人工智能 C++
2016年第七届C/C++ B组蓝桥杯省赛真题(上)
2016年第七届C/C++ B组蓝桥杯省赛真题
2016年第七届C/C++ B组蓝桥杯省赛真题(上)
|
算法 C++
2015年第六届C/C++ B组蓝桥杯省赛真题
2015年第六届C/C++ B组蓝桥杯省赛真题
2015年第六届C/C++ B组蓝桥杯省赛真题
|
C++
蓝桥杯2020省赛真题 作物杂交问题 C++
蓝桥杯2020省赛真题 作物杂交问题 C++
126 1
蓝桥杯2020省赛真题 作物杂交问题 C++
|
Java C++ Python
蓝桥杯2020省赛真题J 怪物猎人 装饰珠 问题(C++解法)(下)
蓝桥杯2020省赛真题J 怪物猎人 装饰珠 问题(C++解法)(下)
57 0
|
C++
蓝桥杯2020省赛真题J 怪物猎人 装饰珠 问题(C++解法)(上)
蓝桥杯2020省赛真题J 怪物猎人 装饰珠 问题(C++解法)(上)
211 0
蓝桥杯2020省赛真题J 怪物猎人 装饰珠 问题(C++解法)(上)
2016年省赛真题c/c++ c组 第七题 寒假作业 全排列+check+筛选条件
2016年省赛真题c/c++ c组 第七题 寒假作业 全排列+check+筛选条件
|
人工智能 算法 新能源
【蓝桥杯历年真题】每日算法详解解析(C/C++)
【蓝桥杯历年真题】每日算法详解解析(C/C++)
374 0
【蓝桥杯历年真题】每日算法详解解析(C/C++)
|
机器学习/深度学习 人工智能 C++
2019年第十届C++ B组蓝桥杯省赛真题(等差数列)
题目描述 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 NN 个整数。 现在给出这 NN 个整数,小明想知道包含这 NN 个整数的最短的等差数列有几项?
185 0