奇怪的捐赠

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

地产大亨 Q 先生临终的遗愿是:拿出 100100 万元给 X 社区的居民抽奖,以稍慰藉心中愧疚。

麻烦的是,他有个很奇怪的要求:

  1. 100100 万元必须被正好分成若干份(不能剩余)。每份必须是 7的若干次方元。比如:1 元, 7 元, 49 元,343 元,...

  2. 相同金额的份数不能超过 5份。

  3. 在满足上述要求的情况下,分成的份数越多越好!

请你帮忙计算一下,最多可以分为多少份?

他人的题解:

非常巧妙的解答了这个问题 ,但是我理解不了啊。

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);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值