GESP二级 - 骑士的金币

**问题描述:**

国王将金币作为奖励,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。

你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。

**输入描述:**

一个整数(范围1到10000),表示天数。

**输出描述:**

骑士获得的金币数。

**用例输入 1 :**

6

**用例输出 1 :**

14

算法解析

根据题意,可以总结出规律,骑士在第n天获得n//2 * (n+1)个金币。所以只需要根据给定的天数,计算出n,然后根据公式计算出金币数即可。

代码实现 (C++)

#include <iostream>
using namespace std;

int main() { int days, n, gold; cin >> days;

// 计算n值
for (n = 1; n * (n + 1) // 2 &lt;= days; ++n) {};

// 计算金币数
gold = n * (n + 1) // 2;

cout &lt;&lt; gold &lt;&lt; endl;
return 0;

}

代码实现 (Python)

def get_gold(days):
    n = 1
    while n * (n + 1) // 2 <= days:
        n += 1
    return n * (n + 1) // 2

days = int(input()) print(get_gold(days))

代码实现 (Java)

import java.util.Scanner;

public class KnightGold { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int days = scanner.nextInt();

    int n = 1;
    while (n * (n + 1) / 2 &lt;= days) {
        n++;
    }
    
    int gold = n * (n + 1) / 2;
    System.out.println(gold);
}

}

**步骤:**

  1. 读取输入的天数n
  2. 计算n对应的n值,即满足n//2 * (n+1) <= n的最大n
  3. 计算骑士获得的金币数,即n * (n+1) // 2
  4. 输出骑士获得的金币数

以上算法和代码实现可以帮助您解决GESP二级 - 骑士的金币问题。希望对您有所帮助!

GESP二级 - 骑士的金币:算法解析与代码实现

原文地址: https://www.cveoy.top/t/topic/qjaS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录