GESP二级 - 骑士的金币:算法解析与代码实现
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 <= days; ++n) {};
// 计算金币数
gold = n * (n + 1) // 2;
cout << gold << 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 <= days) {
n++;
}
int gold = n * (n + 1) / 2;
System.out.println(gold);
}
}
**步骤:**
- 读取输入的天数n
- 计算n对应的n值,即满足n//2 * (n+1) <= n的最大n
- 计算骑士获得的金币数,即n * (n+1) // 2
- 输出骑士获得的金币数
以上算法和代码实现可以帮助您解决GESP二级 - 骑士的金币问题。希望对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/qjaS 著作权归作者所有。请勿转载和采集!