AOJ_0158 Collatz's Problem
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0158
ひさしぶりのHaskell
たぶんlet式の意味を正確には把握していない
main = do n <- getContents let vs = map (\cs -> (read cs :: Int)) $ words n putStr $ unlines $ map (\n -> show n) $ solve vs solve :: [Int] -> [Int] solve (0:_) = [] solve (v:vs) = solve' v 0 : solve vs solve' :: Int -> Int -> Int solve' 1 n = n solve' v n = if v `mod` 2 == 0 then solve' (v `div` 2) (n+1) else solve' (3*v+1) (n+1)
比較用c言語ソース
#include <cstdio> using namespace std; int main(){ int n, i; while(scanf("%d", &n) && n){ for(i = 0;; i++){ if(n == 1) break; if(n%2 == 0) n /= 2; else n = 3 * n + 1; } printf("%d\n", i); } return 0; }