题目分析
题目给定了一个情境:小M买了一公斤奶酪,且小F偷偷地偷走了其中的 AB\frac{A}{B}BA 公斤奶酪。我们的任务是计算小M剩余的奶酪数量,并且要求输出的结果必须以分数形式表示,且分母是 BBB。
例如,若小M买了一公斤奶酪(即1公斤),小F偷走了其中的 AB\frac{A}{B}BA 公斤,那么小M剩下的奶酪就可以表示为 1−AB1 - \frac{A}{B}1−BA。
解决思路
我们可以从以下几个步骤来解决这个问题:
- 计算剩余的奶酪量:
- 原来小M拥有 1 公斤奶酪,即 1=BB1 = \frac{B}{B}1=BB。
- 小F偷走了 AB\frac{A}{B}BA 公斤奶酪,因此剩下的奶酪量就是: 剩余奶酪=1−AB=BB−AB=B−AB\text{剩余奶酪} = 1 - \frac{A}{B} = \frac{B}{B} - \frac{A}{B} = \frac{B - A}{B}剩余奶酪=1−BA=BB−BA=BB−A 这就是我们需要输出的剩余奶酪的分数。
- 返回分数形式:
- 我们需要将结果以字符串形式返回,格式为
"B-A/B"。
- 我们需要将结果以字符串形式返回,格式为
代码实现
java复制代码public class Main {
public static String solution(int A, int B) {
// 计算剩余的奶酪量,以分数形式表示
int remain = B - A; // 剩余的奶酪数量(分子)
// 使用StringBuilder来拼接返回值
StringBuilder result = new StringBuilder();
// 将结果按照“分子/分母”的格式添加到StringBuilder中
result.append(remain); // 添加分子(剩余的奶酪)
result.append("/"); // 添加分隔符"/"
result.append(B); // 添加分母(总量B)
// 将StringBuilder转换为字符串并返回
return result.toString();
}
public static void main(String[] args) {
// 进行几个测试
System.out.println(solution(2, 7).equals("5/7")); // 2/7被偷走,剩下5/7
System.out.println(solution(1, 3).equals("2/3")); // 1/3被偷走,剩下2/3
System.out.println(solution(3, 5).equals("2/5")); // 3/5被偷走,剩下2/5
}
}
代码解释
solution方法:A和B是输入的两个整数,表示小F偷走的奶酪的分数部分 AB\frac{A}{B}BA。- 我们计算剩余奶酪量
remain = B - A,然后将其表示为一个分数remain/B。 - 使用
StringBuilder来构造结果字符串,首先添加分子remain,然后是斜杠/,最后是分母B。 - 返回拼接好的结果字符串。
main方法:- 进行了一些简单的测试,确保程序正确计算了剩余奶酪量,并且按预期返回了结果。
测试
通过测试几个不同的案例来验证代码的正确性:
- 当 A=2A = 2A=2, B=7B = 7B=7 时,剩余奶酪为 7−27=57\frac{7 - 2}{7} = \frac{5}{7}77−2=75,返回
"5/7"。 - 当 A=1A = 1A=1, B=3B = 3B=3 时,剩余奶酪为 3−13=23\frac{3 - 1}{3} = \frac{2}{3}33−1=32,返回
"2/3"。 - 当 A=3A = 3A=3, B=5B = 5B=5 时,剩余奶酪为 5−35=25\frac{5 - 3}{5} = \frac{2}{5}55−3=52,返回
"2/5"。
复杂度分析
- 时间复杂度:由于我们仅仅是进行了一次简单的算数计算和字符串拼接,因此时间复杂度为 O(1)O(1)O(1)。
- 空间复杂度:我们使用了一个
StringBuilder来拼接结果,空间复杂度也是 O(1)O(1)O(1)。
总结
本题的关键在于理解如何表示剩余的奶酪量并以分数形式返回。通过简单的算数运算和字符串拼接,可以快速地得到答案。这种题目对于练习分数计算和字符串操作是非常有帮助的。