4月19日今日のアルゴリズム
4867 ワード
コラズの推測
1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
1-1. 入力した数字が偶数の場合は2に分けられます.
1-2. 入力した数字が奇数の場合、3を掛けて1を加算します.
2.結果が1になるまで、同じ操作を繰り返します.
例えば、入力された数字が6であれば、6→3→10→5→16→8→4→2→1の計8回が1となる.
上記の操作を何回繰り返すかを示す関数を返します.解決策を完了します.
ただし、タスクを500回繰り返しても1未満の場合は、-1を返します.
1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.
1-1. 入力した数字が偶数の場合は2に分けられます.
1-2. 入力した数字が奇数の場合、3を掛けて1を加算します.
2.結果が1になるまで、同じ操作を繰り返します.
例えば、入力された数字が6であれば、6→3→10→5→16→8→4→2→1の計8回が1となる.
上記の操作を何回繰り返すかを示す関数を返します.解決策を完了します.
ただし、タスクを500回繰り返しても1未満の場合は、-1を返します.
function solution(num) {
count = 0
for(let i = 0; i< 500; i++){ //500번을 반복했을때 1이 안나오면 return -1
if (num !== 1){ //1이 아닌 경우
(num = num % 2=== 0? num /2 : num *3 + 1) //num을 2로 나누었을 때 나머지가 0인 경우에는 num/2 아닌 경우에는 num *3 + 1
}
else { //num이 1이 된 경우
return count = i //현재 횟수 출력
}
}return count = -1 //500번을 반복했을때 1이 안나오면 return -1
}
function solution(num) {
var count = 0;
while (count < 500) {
if (num === 1) {
return count;
}
count ++;
num = num % 2 === 0 ? num /2 : num *3 +1;
}
return -1;
}
ドアを使わない傾向がありますが、whileドアを使って問題を解く練習が必要です.Reference
この問題について(4月19日今日のアルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@jeongmin1625/4월-19일-오늘의-알고리즘テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol