算法题--通过奇偶性判断深度

284 阅读1分钟

问题:

有两台机器可以通过投入x(x可以为0)个币产生更多的币。

  • 机器1:如果投入x个币,机器会将其变为2x+1个币
  • 机器2:如果投入x个币,机器会将其变为2x+2个币

输入描述:

输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示需要的币数量。

输出描述:

输出一个字符串,每个字符表示该次选取投入的机器。其中只包含字符'1'和'2'。

比如:

输入:

10

输出:

122

思路:

如果使用机器1,则它的下一次输出一定是奇数,如果使用机器2,则它的下一次输出一定是偶数。所以通过最后得到的n的奇偶性往前推,如果时奇数就执行 (n-1)/2 迭代运算, 如果是偶数就执行 (n-2)/2 迭代运算,直到n = 0为止,输出经过的机器的顺序的倒序即可。

JS代码:

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});
let n;
let result = '';
rl.on('line', (line) => {
    n = Number(line);
    cal(n);
    console.log(result.split('').reverse().join(''));
});
function cal(N) {
    if(N > 0){
        if(N%2){
         if(((N-1)/2)===0) {
             result=result+'1';
         } else {
             result=result+'1';
             cal((N-1)/2);
         }
     } else {
         if(((N-2)/2)===0) {
             result=result+'2';
         } else {
             result=result+'2';
             cal((N-2)/2);
         }
     }
    }
}

代码已检测,通过率 100%。

问题状态:

已解决 √