プログラマー[レベル1]コーラの推測


質問する


1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
1-1. 入力した数字が偶数の場合は2に分けられます.
1-2. 入力した数字が奇数の場合、3を掛けて1を加算します.
2.結果が1になるまで、同じ操作を繰り返します.

せいげんじょうけん


入力された数値numは1または800000未満の整数です.

I/O例



に答える

function solution(n) {
    let count = 0;
    while(n!==1){
        if(count===500) return -1;
        if(n%2 ===0){
            n = n/2;
        } else {
            n = n*3 +1;
        }
        count++;
    }
    return count;
}
アルゴリズムをwhile文で解くときに感じるのはforだけでなくwhile反復文も適切に使うことです.

別の解釈

function collatz(num) {
    var answer = 0;
    while(num !=1 && answer !=500){
        num%2==0 ? num = num/2 : num = num*3 +1;
    answer++;
  }
    return num == 1 ? answer : -1;
}
while文条件にcountの条件を加え,終了時に決定する.