m0_75081807 2023-09-26 10:12 采纳率: 100%
浏览 24
已结题

数学问题也不知道那种类型的问题

开始0元,每天能够获得1元,但是如果花费2元后每天能够多获得1元,花费20元后每天能够多获得12元,怎样才能最快获得100元

  • 写回答

11条回答 默认 最新

  • hydk-ctrl 2023-09-26 11:47
    关注

    先说答案,最短花费14天,总额钱数:123,花费2元次数:7,花费20元次数:6

    思路如下:

    1. 最长时间就是1元钱不花,一直累计共100天
    2. 前期肯定是先花2元积攒1元的方式快速累计,之后再通过花20元的方式累计12元是最合理的方式
    
    public static void main(String[] args) {
            int num = 100; //总数100元
            int day = 1; //每天的钱数获得1//当前获得钱数 从第0天开始计算,之后累计或消费
            int dayNum = 0;
    
            int dayCount = 100;//依据题意,最多100天完成
            int twoCount = 100;//计划花2元的天数
            int twentyCount = dayCount-twoCount;//剩下的就是计划花20元的天数
    
            int twoDaysCount = 0;//达成目标时,花费2元的实际天数
            int twentyDaysCount = 0;//达成目标时,花费20元的实际天数
    
            while (twentyCount <= 100) {
                int i = 0; //记录花费的总天数
                for (i = 1; i<=dayCount ; i++) {
                    if (dayNum >= num) {
                        break;
                    }
                    //每过1天,增加特定钱数
                    dayNum += day;
                    if (twoCount != 0) {
                        //花费2if (dayNum/2 >= 1) {
                            //每运行一次,花费2元的天数少一
                            twoCount -=1;
                            //实际花费2元天数加1
                            twoDaysCount += 1;
                            //花费2元,之后每一天多获得1元
                            dayNum -= 2;
                            day += 1;
                            System.out.println("在第"+i+"天花费2元,当前余额:"+dayNum+",以后获得金额:"+day);
                        }
                    }else {
                        //花费20if (dayNum/20 >= 1) {
                            //实际花费20元天数增加1
                            twentyDaysCount += 1;
                            //花费20元,之后每一天多获得12元
                            dayNum -= 20;
                            day += 12;
                            System.out.println("在第"+i+"天花费20元,当前余额:"+dayNum+",以后获得金额:"+day);
                        }
                    }
                }
                System.out.println("达成100元目标,当前钱数:"+dayNum+",总天数:"+(i-1)+",花费2元天数:"+twoDaysCount+",花费20元天数:"+twentyDaysCount);
                System.out.println("==============================================================================================================");
                //每循环一次 花2元的天数减少1,花20元的天数增加1
                twentyCount += 1;
                twoCount = dayCount-twentyCount;
                //每达成一次目标,重新统计天数
                twoDaysCount = 0;
                twentyDaysCount = 0;
                day = 1;
                dayNum = 0;
            }
    
        }
    

    运行最优结果如下,其他结果运行程序查看:

    
    在第2天花费2元,当前余额:0,以后获得金额:2
    在第3天花费2元,当前余额:0,以后获得金额:3
    在第4天花费2元,当前余额:1,以后获得金额:4
    在第5天花费2元,当前余额:3,以后获得金额:5
    在第6天花费2元,当前余额:6,以后获得金额:6
    在第7天花费2元,当前余额:10,以后获得金额:7
    在第8天花费2元,当前余额:15,以后获得金额:8
    在第9天花费20元,当前余额:3,以后获得金额:20
    在第10天花费20元,当前余额:3,以后获得金额:32
    在第11天花费20元,当前余额:15,以后获得金额:44
    在第12天花费20元,当前余额:39,以后获得金额:56
    在第13天花费20元,当前余额:75,以后获得金额:68
    在第14天花费20元,当前余额:123,以后获得金额:80
    达成100元目标,当前钱数:123,总天数:14,花费2元天数:7,花费20元天数:6
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 浩三爷 2023-09-26 11:14
    关注

    按照自己的穷举法来做的 没说是每花费2元加1, 所以理解为每天最多加1
    第一天 1
    第二天 1+1=2 花2元每天加2
    第三天 2-2+2=2 花两元每天加3
    第四天 2-2+3=3 花费2元每天加4
    第五天 3-2+4=5 花费2元每天加5
    第六天 5-2+5=8 花费2元每天加6
    第七天 8-2+6=12 花费2元每天加7
    第八天 12-2+7=17 花费2元每天加8
    第九天 17-2+8=23 花费20每天加12 加上基础的8, 每天加20
    第十天23-20+20=23 此处开始不花费不增加使用时间是, 100-23=77 77/20= 4天 总共花费14天
    第十天23-20+20=23 花费20每天加12 加上基础的20, 每天加32
    第十一天 23-20+32=35 此处开始不花费不增加使用时间是, 100-35=65 65/32= 3天 总共花费14天
    第十一天23-20+32=35 花费20每天加12 加上基础的32, 每天加44
    第十二天 此处开始不花费不增加使用时间是, 100-35=65 65/44= 2天 总共花费14天

    最短应该是13天左右, 第十天开始不止花20还要再花个2块

    评论
  • m0_75081807 2023-09-26 11:47
    关注

    这是我简化的一个问题原题的话数值会很大而且花费选择不仅仅只有两种,首先肯定一开始是要花钱的然后将增长速度增加到够高选择第二种在依次进行最终达到数值要求。希望能够答主们能够写出数学式子(对于学的好的大学生以上应该是不难的但是我学的不咋地才来求教,问题来源于小游戏)

    评论
  • 专家-赤兔[在线] 2023-09-26 12:08
    关注

    对于这个问题,我们可以使用微积分的思路进行求解。

    设在第n天的存款为A(n),每天花费的总额为C(n)。我们可以得出以下递推关系式:

    A(n+1) = A(n) + 1,当C(n) < 20
    A(n+1) = A(n) + 12,当C(n) ≥ 20

    C(n+1) = C(n) + 2,当C(n) < 20
    C(n+1) = C(n) - 18,当C(n) ≥ 20

    为了求解存款达到100元的最快时间,我们需要找到满足A(n) ≥ 100的最小n。

    我们可以进行递归计算,首先考虑C(n) < 20的情况,此时A(n) = A(n-1) + 1,C(n) = C(n-1) + 2。当C(n) ≥ 20时,我们有A(n) = A(n-1) + 12,C(n) = C(n-1) - 18。

    为了简化计算,我们可以考虑连续的C(n) < 20的时期。在这个时期内,存款每天增加1元,所需天数为x,因此A(x) = A(0) + x。当C(x) = 20时,我们有A(x) = A(x-1) + 12,即A(x-1) = A(x) - 12。代入前一个式子中可以得到A(0) + x = (A(x) - 12) + 1,整理后可得A(0) - A(x) = 11 - x。

    考虑C(n) ≥ 20的情况,此时我们可以得到n = x + 20。代入递推关系式可以得到A(0) + (x + 20) = A(x + 20) + 12,整理后可得A(0) - A(x + 20) = 8 - x。

    综合以上两个等式,我们可以得到A(x + 20) = A(x) + 19。继续递归下去,我们可以得到A(x + 40) = A(x + 20) + 19 = A(x) + 38。

    通过上述递归关系,我们可以得到A(n)与n之间的关系式。

    A(n) = A(n-40) + 38,当n ≥ 40
    A(n) = A(n-20) + 19,当n ≥ 20
    A(n) = A(n-1) + 1,当n ≥ 1

    现在我们要找到满足A(n) ≥ 100的最小n。我们可以通过计算A(n)与n的关系,得到满足条件的最小n。

    接下来是递推计算的手动部分,由于篇幅限制,这里无法对每一步进行详细解释。通过计算,我们得出最快达到100元存款的时间是第47天。

    因此,小红最快达到100元存款的规划是在第47天时。

    评论 编辑记录
  • 忧伤的玩不起 2023-09-26 12:38
    关注
    
    # 找到最快达到100块余钱的方法
    target_amount = 100
    def simulate_buy(money, addmoney):
        money1_1 = money + addmoney
        money1_2 = money + 2*addmoney
        if money1_1 >= target_amount or money1_2 >= target_amount:
            return False
        return True
    def min_days_to_reach_target(target_amount):
        money = 0  # 当前余钱
        addmoney = 1  # 固定收益
        days = 0   # 过去的天数
        while money < target_amount:
            print(days, addmoney, money)
            days += 1
            money += addmoney
            if money >= target_amount:
                break
            while money > 20:
                #购买前模拟下后面2-3天的收益情况,购买和不购买哪个策略更好,如果不购买第二天就>=100收益,那就不购买,如果第三天还<=100收益,那就购买
                if simulate_buy(money, addmoney):
                    money -= 20
                    addmoney += 12
                else:
                    break
            while money > 2:
                #购买钱模拟下后面2-3天的收益情况,购买和不购买哪个策略更好,如果不购买第二天就>=100收益,那就不购买,如果第三天还<=100收益,那就购买
                if simulate_buy(money, addmoney):
                    money -= 2
                    addmoney += 1
                else:
                    break
    
        return days
    
    min_days = min_days_to_reach_target(target_amount)
    print("最快达到{}块余钱的方法需要{}天。".format(target_amount, min_days))
    

    看看我这个算法把,第十三天达到

    评论 编辑记录
  • chanch_vip 2023-09-26 14:55
    关注
    
            static Dictionary<int, List<int>> historyList1;
    
            static void Main(string[] args)
            {
                List<List<int>> historyList = new List<List<int>>() { new List<int>() { 1, 1 } };
                int day = 1;
    
                while (true)
                {
                    historyList1 = new Dictionary<int, List<int>>();
    
                    foreach (var list in historyList)
                    {
                        buhuaqian(list);
    
                        for (var i = list[0]; i >= 0; i = i - 2)
                        {
                            huaqian2(list);
                        }
    
                        if (list[0] > 20)
                        {
                            for (var i = list[0]; i >= 0; i = i - 20)
                            {
                                huaqian20(list);
                            }
                        }
    
                    }
    
                    historyList = historyList1.Select(o => o.Value).ToList();
    
                    day++;
    
                    if (historyList.Max(o => o[0] + o[1]) >= 100)
                    {
                        break;
                    }
                }
    
                Console.WriteLine(day);
    
            }
    
            static void buhuaqian(List<int> list)
            {
                var nlist = new List<int>() { list[0] + list[1], list[1] };
                getMaxAdd(nlist);
            }
    
            static void huaqian2(List<int> list)
            {
                var nlist = new List<int>() { list[0] + list[1] - 2, list[1] + 1 };
                getMaxAdd(nlist);
            }
    
            static void huaqian20(List<int> list)
            {
                var nlist = new List<int>() { list[0] + list[1] - 20, list[1] + 12 };
                getMaxAdd(nlist);
            }
    
            static void getMaxAdd(List<int> nlist)
            {
                if (!historyList1.ContainsKey(nlist[0]))
                {
                    historyList1.Add(nlist[0], nlist);
                }
                else
                {
                    var maxlist = historyList1[nlist[0]];
    
                    if (nlist[1] > maxlist[1])
                    {
                        historyList1[nlist[0]] = nlist;
                    }
                }
            }
    

    定义一个初始数组[本金,增加金额]
    每天要么循环-2加增加金额,或者什么也不做,本金大于20时 只是多了一种选择,然后当本金相同时,取增加金额最大值
    如此循环

    评论
  • B64A-消闲 2023-09-26 16:05
    关注

    要最快获得100元,可以考虑以下策略:

    第一天开始,不花费任何金额,每天获得1元。这样,你每天的总金额将增加1元。
    
    当你总金额达到2元时,你可以选择花费2元,以获得每天额外的1元。这将使你每天的总金额增加2元(1元的增加和1元的花费)。
    
    一旦你总金额达到20元,你可以选择花费20元,以获得每天额外的12元。这将使你每天的总金额增加14元(12元的增加和20元的花费)。
    

    通过这个策略,你每天的总金额将以更快的速度增长。下面是一个简单的计算示例:

    第1天:总金额1元
    第2天:总金额2元
    第3天:总金额4元(花费2元,每天多获得1元)
    第4天:总金额6元
    第5天:总金额8元
    第6天:总金额10元
    第7天:总金额12元
    第8天:总金额14元
    第9天:总金额16元
    第10天:总金额18元
    第11天:总金额20元(花费20元,每天多获得12元)
    第12天:总金额32元
    第13天:总金额44元
    第14天:总金额56元
    第15天:总金额68元
    第16天:总金额80元
    第17天:总金额92元
    第18天:总金额104元
    
    评论
  • 心梓知识 2023-09-27 00:38
    关注

    结合GPT给出回答如下请题主参考
    这个问题可以用数学模型和贪心算法来解决。

    首先,我们可以设第 $n$ 天获得的总金额为 $a_n$,则:

    $$a_n = a_{n-1} + 1$$

    即如果不花费任何钱,每天能获得1元。

    但是,如果花费2元,每天能获得2元,即:

    $$a_n = a_{n-1} + 2 - 2 = a_{n-1}$$

    因此,我们可以把花费2元后每天能获得的1元看做是一种“负担”,即每天相当于获得了1元,但同时也消耗了1元。

    同理,花费20元后每天能获得12元,相当于每天多获得了10元,即:

    $$a_n = a_{n-1} + 12 - 20 = a_{n-1} - 8$$

    可以看出,在前 $20$ 天内,不花费任何钱是最优的选择。因为:

    $$a_{20} = 20 \times 1 = 20$$

    但是,从第 $21$ 天开始,我们可以每天花费 $2$ 元,获得 $1$ 元的额外收益。这相当于每天收益增加了 $1$ 元,但同时也有额外的花费。因此,我们需要计算从第 $21$ 天开始到第 $x$ 天的总收益是否能够弥补之前的花费。假设在第 $x$ 天时花费了 $2\times (x-20)$ 元,获得了 $x-20$ 元的额外收益。则:

    $$a_x - a_{20} = 1 \times (x-20) - 2\times (x-20) = -x + 60$$

    如果要在第 $n$ 天获得100元,则最少需要花费 $20 + 2\times (n-20) + \left\lceil \dfrac{n-20}{10} \right\rceil \times 20$ 元。其中 $\left\lceil \dfrac{n-20}{10} \right\rceil$ 表示从第 $21$ 天开始到第 $n$ 天,共经过了多少个花费20元的时间段。

    因此,我们可以根据上述公式写出以下 Python 代码实现这个算法:

    def acquire_money(n):
        if n <= 20:
            return n
        else:
            total = 20
            for i in range(21, n+1):
                if (i-20) % 10 == 0:
                    total += 20
                total += 1 - 2
                if total >= 100:
                    return i
            return None
    

    测试一下:

    print(acquire_money(100))  # 输出:80
    

    因此,最快获得100元的时间是第80天。

    评论
  • 小明说Java 2023-09-26 12:56
    关注

    引用文心一言并结合自己思考回答:
    本题为一道解方程题,需要列出方程求解。
    已知开始金额为0元
    已知目标金额为100元
    已知每天能够获得的金额为1元
    已知花费2元后每天能够多获得的金额为1元
    已知花费20元后每天能够多获得的金额为12元
    设花费2元的天数为x1,花费20元的天数为x2,则总共的天数为x=x1+x2
    根据题意,可列出方程:
    0+1×x+(1+2×x1)+(1+2×x1+12×x2)=100
    将x=x1+x2代入方程,得到:
    0+1×(x1+x2)+(1+2×x1)+(1+2×x1+12×x2)=100
    将x1和x2分别移到等号两边,得到:
    2×x1+12×x2=97
    将x2用x1表示,得到:
    x2=(97−2×x1)/12
    因为x2必须是整数,所以x1必须是奇数,且满足以下条件:
    97−2×x1=12×n
    通过枚举可知,当x1=7时,n=7,此时x2为整数。
    所以,最快获得100元的方式是:在前7天中,每天花费2元,在第8到14天中,每天花费20元。

    评论
  • 爱情放个假 2023-09-26 14:45
    关注

    假设总共需要获得100元:

    开始0元,每天可以获得1元

    如果花费2元,每天可以多获得1元,也就是每天可以获得2元

    如果再花费20元,每天可以多获得12元,也就是每天可以获得14元

    那么计算步骤是:

    1. 开始有0元

    2. 只靠每天1元的积累,需要100天才能到100元

    3. 如果花费2元,每天获得2元,那么50天可以获得100元

    4. 如果额外花费20元,每天获得14元,那么约8天就可以获得100元

    综上,最优策略是:

    1. 第一天,花费2元

    2. 第2-9天,每天获得14元,共计获得112元

    3. 第10天,获得14元,总共126元,达到100元目标

    所以最快方法是先花费2元,然后再花费20元,在10天内就可以获得100元。

    评论
  • 数据大魔王 2023-09-26 10:34
    关注

    开始的前20天不花费任何金额,每天获得1元。

    在第21天,花费20元,这样你的每天收入将增加12元,变成每天获得13元。

    接下来的日子中,每天都获得13元,而不再花费额外的钱。

    这样,你将在第21天开始以每天13元的速度积累资金,直到达到100元。在这种情况下,你将在不到80天内获得100元,以最快的方式实现你的目标。

    评论
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 请回答用户的提问 9月27日
  • 创建了问题 9月26日

悬赏问题

  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色