问题描述
有这样一个规律:对任意大于 1 的自然数 n,如果 n 为奇数,将其变化为 3n + 1;如果 n 为偶数,将其变化为 n/2。经过若干次变化后,一定会使 n 变为 1。
如果 n = 5:
- 5 -> 16 -> 8 -> 4 -> 2 -> 1
如果 n = 3:
- 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
现在,输入一个整数 n,请计算出总的变化次数。例:n = 5,l = 5;n = 3,l = 7。(l 表示变化次数)
二分查找是一个比较简单的算法,用 C++ 语言实现如下:
template <typename T>
int binary_search(
const T& key, // 搜索元素 key
vector<int>::const_iterator data, // 数组起始位置
int N) // 元素个数
{
// 左闭右闭
int low = 0;
int high = N - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (key < *(data + mid))
high = mid - 1;
else if (key > *(data + mid))
low = mid + 1;
else
return mid;
}
return -1;
}
用法:
// vector<int> arr = {1, 2, 3, 4, 5, 65};
// cout << binary_search(5, arr.cbegin(), 6) << endl;
// cout << binary_search(1, arr.cbegin(), 6) << endl;
// cout << binary_search(4, arr.cbegin(), 6) << endl;