codevs天梯 3n+1問題 暴力水題

題目:

3n+1問題是一個簡單有趣而又沒有解決的數學問題。這個問題是由L. Collatz在1937年提出的。克拉茲問題(Collatz problem)也被叫做hailstone問題、3n+1問題、Hasse算法問題、Kakutani算法問題、Thwaites猜想或者Ulam問題。
問題如下:
(1)輸入一個正整數n;
(2)如果n=1則結束;
(3)如果n是奇數,則n變爲3n+1,否則n變爲n/2;
(4)轉入第(2)步。
克拉茲問題的特殊之處在於:儘管很容易將這個問題講清楚,但直到今天仍不能保證這個問題的算法對所有可能的輸入都有效——即至今沒有人證明對所有的正整數該過程都終止。
輸入描述 Input Description

第一行是一個整數T.表示輸入數據的組數.

第二行是T個正整數n.

輸出描述 Output Description

對於每個正整數n,每行輸出一個數s,表示n通過多少步變換會變成1,如果n無法變成1,則輸出-1.


代碼:

const
  maxn=100000;


var
  f:array [0..maxn] of longint;
  n,i,ans:longint;


begin
  readln(n);
  for i:=1 to n do
    begin
      read(f[i]);
      ans:=0;
      while f[i]<>1 do
        begin
          if odd(f[i]) then
            begin
              f[i]:=3*f[i]+1;
              inc(ans);
            end
          else
            begin
              inc(ans);
              f[i]:=f[i] div 2;
            end;
        end;
      writeln(ans);
    end;
end.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章