蓝桥每日打卡
#蓝桥#JAVA#奇怪的捐赠
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
地产大亨 Q 先生临终的遗愿是:拿出100万元给 X 社区的居民抽奖,以稍慰藉心中愧疚。
麻烦的是,他有个很奇怪的要求:
-
100万元必须被正好分成若干份(不能剩余)。每份必须是 7 的若干次方元。比如:1 元, 7 元, 49 元,343 元,…
-
相同金额的份数不能超过 5份。
-
在满足上述要求的情况下,分成的份数越多越好!
请你帮忙计算一下,最多可以分为多少份?
public class StrangeDonation {
public static void main(String[] args) {
// 步骤 1: 初始化变量
int money = 1000000;
int totalParts = 0;
// 步骤 2: 进行 7 进制转换并累加各位数字
while (money > 0) {
// 步骤 2.1: 计算当前位的数字
int remainder = money % 7;
// 步骤 2.2: 累加当前位数字到总份数
totalParts += remainder;
// 步骤 2.3: 更新 money 的值,去掉已处理的最低位
money /= 7;
}
// 步骤 3: 输出结果
System.out.println(totalParts);
}
}
步骤 1: 初始化变量
int money = 1000000;
int totalParts = 0;
money
:这个变量用于存储初始的捐赠金额,即 100 万元。在后续的计算过程中,我们会不断对这个值进行处理,逐步将其转换为 7 进制表示。totalParts
:用于记录最终分成的份数。初始时将其赋值为 0,在后续计算 7 进制各位数字之和的过程中,会不断将各位数字累加到这个变量中。步骤 2: 进行 7 进制转换并累加各位数字
while (money > 0) {
int remainder = money % 7;
totalParts += remainder;
money /= 7;
}
这是整个算法的核心部分,使用 while
循环来完成 100 万到 7 进制的转换,并同时累加各位数字。
步骤 2.1: 计算当前位的数字
int remainder = money % 7;
money % 7
计算得到当前 money
值对应的 7 进制最低位数字,并将其存储在 remainder
变量中。步骤 2.2: 累加当前位数字到总份数
totalParts += remainder;
remainder
中)后,将其累加到 totalParts
变量中。这样随着循环的进行,totalParts
就会不断累加 7 进制数的每一位数字。步骤 2.3: 更新 money 的值,去掉已处理的最低位
money /= 7;
money
的值更新,去掉已经处理过的最低位,以便继续处理更高位。例如,对于十进制数 10,在处理完最低位(通过 10 % 7
得到 3)后,执行 10 / 7 = 1
,这样就去掉了最低位,接下来可以继续处理更高位。在循环中,通过 money /= 7
实现这个操作,不断缩小 money
的值,直到其变为 0,表示已经完成了整个 7 进制的转换。步骤 3: 输出结果
System.out.println(totalParts);
money
变为 0 时,while
循环结束,此时 totalParts
中存储的就是 100 万转换为 7 进制后各位数字之和,也就是满足题目条件下的最大份数。最后使用 System.out.println
方法将这个结果输出。作者:xxjiaz