You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按周递增单日储蓄额的总金额计算Java代码优化问题

解决方案

实现思路

原代码仅对前两周做了硬编码判断,要适配任意天数,只需将单日存款额的计算逻辑通用化:

  • 任意一天的存款额等于当前所在周数,第1周(第1-7天)存1美元,第2周(第8-14天)存2美元,以此类推
  • 总储蓄可通过两种方式计算:循环累加每日存款额,或用数学公式直接计算,两种方式均支持任意天数输入

优化后代码(循环版,逻辑简单易懂)

import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {
        int days;
        int savings = 0;
        Scanner input = new Scanner(System.in);
        
        System.out.print("Enter the number of days: ");
        days = input.nextInt();
        input.close();

        for(int i = 0; i < days; i++){
            // 自动计算当日存款额,无需硬编码周数范围
            int dailySave = (i / 7) + 1;
            savings += dailySave;
        }

        System.out.println("Total Frank's savings (after " + days +" days): " + savings);
    }
}

优化后代码(公式版,性能更高)

如果输入天数量级很大,公式法可实现O(1)时间复杂度计算,无需循环遍历:

import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {
        int days;
        Scanner input = new Scanner(System.in);
        
        System.out.print("Enter the number of days: ");
        days = input.nextInt();
        input.close();

        int fullWeeks = days / 7;
        int remainDays = days % 7;
        // 整周部分总储蓄:7*(1+2+...+fullWeeks) = 7*fullWeeks*(fullWeeks+1)/2
        int fullWeekSavings = 7 * fullWeeks * (fullWeeks + 1) / 2;
        // 剩余不足一周部分的总储蓄
        int remainSavings = remainDays * (fullWeeks + 1);
        int totalSavings = fullWeekSavings + remainSavings;

        System.out.println("Total Frank's savings (after " + days +" days): " + totalSavings);
    }
}

验证结果

以示例的16天为例:

  • 完整周数为2,整周总储蓄为723/2=21美元
  • 剩余天数为2,剩余部分储蓄为2*3=6美元
  • 总储蓄为27美元,和示例结果完全一致

内容的提问来源于stack exchange,提问作者Rivf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:30:02