1001 害死人不偿命的(3n+1)猜想
自己写的第一版,OJ失败。
1001-F-01:
#include<iostream>
int main(){
int n;
int count = 0;
std::cin >> n;
if(n % 2 == 0){
while(n != 1){
n = n/2;
++count;
}
}
else
while(n != 1){
n = (3*n+1)/2;
++count;
}
std::cout << count;
return 0;
}
我来搜一下Bing看看别人咋写的…
好久没做题全忘了,好生疏…好简单的题…
这个版本无超时,将判断n是否等于1的while循环放出来做最外层,这样就不会判断两次,count也只需要做一次加法,第一遍没通过是因为等于把一道题做了两遍那种时间复杂度会非常高。n的值若是很大,while是跑不过时间限制的。
1001-T-01:
#include<iostream>
int main(){
int n = 0;
int count = 0;
std::cin >> n;
while(n != 1){
if(n % 2 == 0)
n = n/2;
else
n = (3*n+1)/2;
count++;
}
std::cout << count;
return 0;
}