首页 > 试题广场 >

翻倍

[编程题]翻倍
  • 热度指数:4329 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小易给定你数字和系数。每次操作你可以将变成或者将变成。问至少几次操作使得

输入描述:
第一行数据组数,对于每组数据,一行四个整数
.


输出描述:
对于每组数据,输出一个数字表示答案
示例1

输入

2
1 5 7 2
3 5 1 2

输出

1
2
示例2

输入

2
1 15 4 2
12 19 3 2

输出

3
3
let n = parseInt(readline());
for (let i = 0; i < n; i++) {
    let arr = readline().split(" ").map(Number);
    let res = f(arr);
    console.log(res);
}

function f(arr) {
    // 只有当a + p >= b时,才值得让a = a + p
    let a = arr[0];
    let b = arr[1];
    let p = arr[2];
    let q = arr[3];
    
    let count = 0;
    while (a < b) {
        if (a + p >= b) {
            a = a + p;
        } else {
            p = p * q;
        }
        count++;
    }
    
    return count;
}

发表于 2020-10-20 22:20:25 回复(0)
var T = parseInt(readline());
while (T--) {
    var arr = readline().split(" ")
    var A = parseInt(arr[0]);
    var B = parseInt(arr[1]);
    var p = parseInt(arr[2]);
    var q = parseInt(arr[3]);
    print(test(A, B, p, q))
}
function test(A,B,p,q){
    var index = 0;
    while(A<B){
        if(q==1){
            A = A+p;
        }else{
            if(A+p<B){
                p=p*q;
            }else{
                A=A+p;
            }
        }
        index++;
    }
    return index;
}

编辑于 2020-08-07 17:21:46 回复(0)
var T = parseInt(readline());
while (T--) {
    var arr = readline().split(" ")
    var A = parseInt(arr[0]);
    var B = parseInt(arr[1]);
    var p = parseInt(arr[2]);
    var q = parseInt(arr[3]);
    print(test(A, B, p, q))
}

function test(A, B, p, q) {
    var dp = [];
    var index = 0;
    var min = Number.MAX_VALUE
    dp[0] = Math.ceil((B - A) / p)
    var temp = p;
    while (++index) {
        temp = p
        temp = temp * Math.pow(q, index);
        var n = Math.ceil((B - A) / temp)
        dp.push(index + n)

        min = Math.min(n + index, min)
        if (index - 1 > 0 && dp[index] > dp[index - 1]) {
            return min
        }
    }
}
发表于 2020-04-11 11:52:48 回复(0)