本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
地产大亨 Q 先生临终的遗愿是:拿出 100100 万元给 X 社区的居民抽奖,以稍慰藉心中愧疚。
麻烦的是,他有个很奇怪的要求:
-
100100 万元必须被正好分成若干份(不能剩余)。每份必须是 7的若干次方元。比如:1 元, 7 元, 49 元,343 元,...
-
相同金额的份数不能超过 5份。
-
在满足上述要求的情况下,分成的份数越多越好!
请你帮忙计算一下,最多可以分为多少份?
他人的题解:
非常巧妙的解答了这个问题 ,但是我理解不了啊。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 将1000000转换为7进制
String str = Integer.toString(1000000, 7);
// 输出7进制的字符串,注释掉的代码行
// System.out.println(str); // 输出7进制表示的字符串
int count = 0;
// 遍历字符串中的每个字符,计算数字和
for (int i = 0; i < str.length(); i++) {
count += str.charAt(i) - '0';
}
// 输出数字和
System.out.println(count);
scan.close();
}
}
为什么要转换为7进制来求解呢?
所以一共有16份。
还可以暴力算法解:
public static void main(String[] args) {
int sum = 1000000;
int[] powersOfSeven = {1, 7, 49, 343, 2401, 16807, 117649, 823543};
int maxCount = 5; // 相同金额的份数不能超过5份
for (int i = 0; i <= maxCount; i++) {
for (int j = 0; j <= maxCount; j++) {
for (int k = 0; k <= maxCount; k++) {
for (int l = 0; l <= maxCount; l++) {
for (int m = 0; m <= maxCount; m++) {
for (int n = 0; n <= maxCount; n++) {
for (int o = 0; o <= maxCount; o++) {
for (int p = 0; p <= maxCount; p++) {
int total = i * powersOfSeven[0] +
j * powersOfSeven[1] +
k * powersOfSeven[2] +
l * powersOfSeven[3] +
m * powersOfSeven[4] +
n * powersOfSeven[5] +
o * powersOfSeven[6] +
p * powersOfSeven[7];
if (total == sum) {
System.out.println("找到一种组合:");
System.out.println("1的份数: " + i + ", 7的份数: " + j + ", 49的份数: " + k +
", 343的份数: " + l + ", 2401的份数: " + m +
", 16807的份数: " + n + ", 117649的份数: " + o +
", 823543的份数: " + p);
}
}
}
}
}
}
}
}
}
}
}