Java算法题

题目描述

给定数字A,B (A<B)和系数p,q。每次操作可以选择将A变成 A+p 或者将 p 变成 p*q。求至少几次操作使得 B <= A

输入描述

第一行数据组数T,对于每组数据,一行四个整数A,B,p,q。
1 <= A,p,B <= 10^9,2 <= q <= 10,1<= T <=5.

输出描述

对于每组数据,输出一个数字表示答案

题目

解题思路

分析题目,如果走 A=A+p 这边,A增加只要一步;如果走p=pq这边,A在这步并不增加,A增加最少还需多加一步。所以先判断走 A=A+p 能否使 A >= B,如果可以就直接走这边结束;如果不行再判断连走哪边两部使A增加更多,即 p2 和 pq ,由于题目已经限制了q是一定大于等于2的,所以我们直接不用考虑这个问题。如果走 A=A+p 不能使 A >= B 那么就走 p=pq 这边。

代码如下
import java.util.Scanner;

/*
 * 给定数字A,B (A<B)和系数p,q。
 * 每次操作可以选择将A变成 A+p 或者将 p 变成 p*q。求至少几次操作使得 B <= A
 */
public class Exercise4 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int T = in.nextInt();
		for (int i = 0; i < T; i++) {
			long A = in.nextInt();
			long B = in.nextInt();
			long p = in.nextInt();
			int q = in.nextInt();
			solution(A, B, p, q);
		}
	}

	public static void solution(long A, long B, long p, int q) {
		int count = 0;
		while (A < B) {
			if (A + p >= B) {
				A = A + p;
			} else {
				p = p * q;
			}
			count++;
		}
		System.out.println(count);
	}
}
输入
2
1 5 7 2
3 5 1 2
输出
1
2

输入输出
注意: 这里 p*q 有可能会超出 int 范围,所以使用 long 型.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值