java-骑士的金币

国王用金币赏赐忠于他的骑士。骑士在就职的第一天得到一枚金币。接下来的两天(第二天和第三天)每天得到两枚金币。接下来的三天(第四、五、六天)每天得到三枚金币。接下来的四天(第七、八、九、十天)每天得到四枚金币。这样的赏赐形式一直延续:即连续N天骑士每天都得到N枚金币后,连续N+1天每天都将得到N+1枚金币,其中N为任一正整数。

编写一个程序,对给定的天数计算出骑士得到的金币总数(从任职的第一天开始)。

输入格式:

输入文件至少包含一行,至多包含21行。输入中的每一行(除最后一行)表示一个测试案例,其中仅含一个表示天数的正整数。天数的取值范围为1~10000。输入的最后一行仅含整数0,表示输入的结束。

输出格式:

对输入中的每一个测试案例,恰好输出一行数据。其中包含两个用空格隔开的正整数,前者表示案例中的天数,后者表示骑士从第一天到指定的天数所得到的金币总数。

输入样例:

10
6
7
11
15
16
100
10000
1000
21
22
0

输出样例:

10 30
6 14
7 18
11 35
15 55
16 61
100 945
10000 942820
1000 29820
21 91
22 98

 代码展示

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            int gold = 0;   //骑士得到的金币
            int D = 0;
            int day = sc.nextInt(); //骑士就职天数
            if(day == 0)
                break;
//            每隔一段时间骑士工资 {i} 变高了
            for (int i = 1; D < day; i++) {//这里的 i 是指骑士当天的工资
                for(int j = 0; j< i && D < day; j++,D++)//j 是指骑士在当前工资下干了几天,1金币干一天加薪,2金币干两天加薪
                //    有的时候骑士还没涨工资,他就不干啦!所以交集 D < day
                    gold += i;
            }
            System.out.println(day + " " + gold);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值