g256 - 考拉茲猜想
題目描述
題目要求計算對於給定的正整數 n,依照考拉茲猜想的規則(奇數乘以 3 加 1,偶數除以 2)運算,直到 n 變成 1 需要多少次迭代。輸入為多個正整數,直到輸入結束。
解題思路
此題的解題思路非常直接,就是根據考拉茲猜想的規則進行模擬。對於每個輸入的 n,我們進入一個迴圈,判斷 n 是奇數還是偶數,如果是奇數則執行 n = n * 3 + 1,如果是偶數則執行 n = n / 2。每次迭代都將計數器 ans 加 1。迴圈持續進行,直到 n 等於 1。最後輸出 ans 的值。由於題目限制 n 的範圍不大 (n <= 10^6),因此這種模擬方法是可行的。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入的數字。在最壞的情況下,考拉茲猜想的序列可能很長,需要多次迭代才能達到 1。
- 空間複雜度: O(1),因為我們只使用了幾個變數來儲存 n 和計數器 ans,空間使用是固定的。
程式碼
#include <iostream>
using namespace std;
long long n;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
while(cin >> n){
long long ans=0;
while(n!=1){
if(n%2)
n=n*3+1;
else
n/=2;
++ans;
}
cout << ans << "\n";
}
}