我最近参加了一家公司的面试,面试官问了我一个编程问题:FizzBuzz 是一款经典的儿童游戏,它已经成为一种有趣的编程方式。这个问题可以用以下方式描述:
我最近参加了一家公司的面试,被问到这个编码问题:
FizzBuzz 是一款经典的儿童游戏,它已发展成为一种有趣的编码方式。该问题可以用以下规则来描述:
-
对于给定的整数 f、b 和 n,编写一个程序打印数字 1 到 n
-
对于 f 的倍数,打印 \'Fizz\'
-
对于 b 的倍数,打印 \'Buzz\'
-
对于 f 和 b 的倍数,打印 \'FizzBuzz\'
-
对于其他情况,打印数字
那么...反向 FizzBuzz 是什么?我们有 n 个 FizzBuzz 输出值,但我们不知道 f 和 b 值。使用 FizzBuzz 输出作为我们程序的输入,找到原始 f 和 b 值(所谓的“乘数值”)。
例如,如果输入是 (\'1\', \'2\', \'Fizz\', \'4\', \'Buzz\', \'Fizz\', \'7\', \'8\', \'Fizz\', \'Buzz\', \'11\', \'Fizz\', \'13\', \'14\', \'FizzBuzz\'),则输出应为 3 5
代码
import java.util.ArrayList;
import java.util.List;
public class FizzBuzzMultiplierFinder {
public static void main(String[] args) {
String[] fizzBuzzOutput = {"1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"};
findFizzBuzzMultipliers(fizzBuzzOutput);
}
public static void findFizzBuzzMultipliers(String[] fizzBuzzOutput) {
List<Integer> fizzPositions = new ArrayList<>();
List<Integer> buzzPositions = new ArrayList<>();
// Find positions of "Fizz" and "Buzz" in the output
for (int i = 0; i < fizzBuzzOutput.length; i++) {
if (fizzBuzzOutput[i].contains("Fizz")) {
fizzPositions.add(i + 1); // +1 to convert index to position
}
if (fizzBuzzOutput[i].contains("Buzz")) {
buzzPositions.add(i + 1); // +1 to convert index to position
}
}
// Determine the smallest multiple for Fizz (f)
int f = findGCD(fizzPositions);
// Determine the smallest multiple for Buzz (b)
int b = findGCD(buzzPositions);
System.out.println("f = " + f + ", b = " + b);
}
// Helper method to find the Greatest Common Divisor (GCD)
public static int findGCD(List<Integer> numbers) {
int gcd = numbers.get(0);
for (int i = 1; i < numbers.size(); i++) {
gcd = gcd(gcd, numbers.get(i));
}
return gcd;
}
// Helper method to calculate GCD of two numbers
public static int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
}
我能够解答找到 f 和 b 之间最大公约数的问题。
后来面试官告诉我,此代码不适用于以下输入:
String[] input5 = { "Fizz", "Buzz", "52", "53", "54", "Fizz", "56", "57", "58", "59", "Fizz", "61", "62", "63", "64", "Fizz", "66", "67", "68", "69", "Fizz" }
预期输出为 5,51。
需要帮助重构我的代码以满足上述测试用例
尝试读取字符串数组并根据数组中的数字更新索引。代码变得太乱,无法找到优化的解决方案
需要帮助解决面试问题:反向 FizzBuzz
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!