小韦老师@神犇营-my0121-金币

本文介绍了一种计算骑士累积获得金币数量的算法。通过记录每天发放的金币数、总金币数及连续发放天数,实现了在给定天数内骑士获得金币总数的计算。

小韦老师@神犇营-my0121-金币

题目:

描述

国王将金币作为工资,发放给忠诚的骑士。

第 1 天,骑士收到一枚金币;之后两天(第 2 天和第 3 天)里,每天收到两枚金币;之后三天(第 4、5、6 天)里,每天收到三枚金币;之后四天(第 7、8、9、10 天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续 n 天每天收到 n 枚金币后,骑士会在之后的连续 n+1 天里,每天收到 n+1 枚金币(n 为任意正整数)。

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

输入

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

输出

骑士获得的金币数。

输入样例1

6

输出样例1

14
思路:

整体思路:
来看天数的和金币的变化规律:
天数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
金币:1 2 2 3 3 3 4 4 4  4   5   5   5   5   5   6   6   6   6   6   6

什么时候的涨金币呢?当已经连续发了 m 天,每天都发 m 块金币,这个时候
就该涨金币了。例如:
第 1 天连续 1 天,每天都发了 1 块金币,要将金币涨成 2 块金币。
第 3 天连续 2 天,每天都发了 2 块金币,要将金币涨成 3 块金币。
第 6 天连续 3 天,每天都发了 3 块金币,要将金币涨成 4 块金币。
第 10 天连续 4 天,每天都发了 4 块金币,要将金币涨成 5 块金币。
第 15 天连续 5 天,每天都发了 5 块金币,要将金币涨成 6 块金币。
……
也就是说,在每天发金币的时候,除了要记录今天要发多少金币以外,还要
记录已经连续发了多少天了。如果连续发的天数已经等于所发的金币数,则
应该要涨金币了,第二天所发的金币数应该要加 1。
具体步骤:
1.定义 n,用来表示天数,并且输入 n。
2.定义 3 个变量,用来记录当前要发的金币数,已发总的金币数,和发一样
的金币数,已经连续发了多少天。

	int gold = 1;  // 当前金币数,初始化为 1 
	int sum = 0;  // 总的金币数,初始化为 0 
	int day = 0;  // 用来记录发当前金币数,已经连续多少天,初始化为 0 

3.枚举 1~n,处理每一天的情况:
1)将当前所发金币累加到总的金币数中。
2)发当前金币数的连续天数加 1。
3)若发 gold 块金币已经连续发 gold 天,则涨金币,并且将连续天数归 0。

	for (int i = 1; i <= n; i++) {
		sum += gold;  // 累计金币 
		day++;  // 连续天数加 1 
		if (day == gold) {  // 若发 gold 块金币已经连续发 gold 天 
			gold++;  // 涨金币(金币加 1)  
			day = 0;  // 连续天数归 0,这里不要忘了 
		}
	}	

4.输出总的金币数。

完整代码:
#include <bits/stdc++.h>

using namespace std;

int main() {

	int n;
	cin >> n;
	int gold = 1;  // 当前金币数,初始化为 1 
	int sum = 0;  // 总的金币数,初始化为 0 
	int day = 0;  // 用来记录发当前金币数,已经连续多少天,初始化为 0 
	for (int i = 1; i <= n; i++) {
		sum += gold;  // 累计金币 
		day++;  // 连续天数加 1 
		if (day == gold) {  // 若发 gold 块金币已经连续发 gold 天 
			gold++;  // 涨金币(金币加 1)  
			day = 0;  // 连续天数归 0,这里不要忘了 
		}
	}
	// 输出总的金币数 
	cout << sum;

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值