要求:
https://www.dotcpp.com/oj/contest2325_problem7.html
这一题真的太坑了!!首先理解错了题目意思,不超过,不超过!也就是事实上要从1开始数到<N,得到最大的那个数——那么问题就来了,时间复杂度受不了呀= =
网上找到有人用递归做的,感觉递归也不是最好的办法,数字大了肯定会爆栈,这一题应该是考怎么优化这些算法的
想的是分成大小数来讨论,但改了N次,没有AC,有时间再改吧= =
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int maxn;
int numrecord = n;
if(n<100000){
for(int i = numrecord/2;i <numrecord;i++){
int n = i;
if(n == 1){
maxn = 1;
}
else{
while(n != 1){
if(n%2 == 0){
n = n/2;
if(maxn<n){
maxn = n;
}
}
else{
n = n*3+1;
if(maxn<n){
maxn = n;
}
}
}
}
}
printf("%d",maxn);
}
else{
for(int i = numrecord-600;i <numrecord;i++){
int n = i;
if(n == 1){
maxn = 1;
}
else{
while(n != 1){
if(n%2 == 0){
n = n/2;
}
else{
n = n*3+1;
if(maxn<n){
maxn = n;
}
}
}
}
}
printf("%d",maxn);
}
}