- vim粘贴到系统剪贴板, ubuntu apt-get install vim,这样安装的版本vim-base没有+寄存器(“+y),卸载,重装
- vim全选复制:ggVG(gg回到首行首列,V行选中模式,G定位文档末尾)
- cpp代码
#include <iostream>
#include <map>
using namespace std;
map<long long, long long> coll;
long loopLength(const long long* right){
long length = 1;
long long current = *right;
while(current > 1){
if(current % 2 == 0){
current /= 2;
}
else{
current = current * 3 + 1;
}
length++;
}
return length;
}
long loopLength_speedup(const long long* right){
long long length = 0;
map<long long, long long>::iterator it = coll.find(*right);
if(it == coll.end()){
length = loopLength(right);
coll[*right] = length;
}
else{
length = it->second;
}
return length;
}
int maxLength(const long long* left, const long long* right){
long long min = *left < *right ? *left : *right;
long long max = *left > *right ? *left : *right;
long long current = min;
int maxLength = 0;
while(current <= max){
int length = loopLength_speedup(¤t);
maxLength = length > maxLength ? length : maxLength;
current++;
}
return maxLength;
}
int main(){
long long left, right;
while(cin >> left >> right){
cout << left << " " << right << " " << maxLength(&left, &right) << endl;
}
return 0;
}
代码中的 loopLength_speedup() 用来查找之前已经计算过的数字,如果之前计算过,就不用再计算,直接从map里面取结果就好了.