题目要求计算给定规则序列的某一项,这次的序列稍微复杂一点。
总时间限制: 1000ms 内存限制: 65536kB
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续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
首先观察序列,应当是一个一平方数递增的序列,例如一天1个,两天2个,三天3个。所以可以先对整平方的天数求和,然后计算剩余天数里得到的金币数。
#include <iostream>
using namespace std;
int main() {
int n;
while (cin >> n && n != 0) {
int i = 1, sum = 0, left = n;
while (left >= i) {
sum += i * i;
left -= i;
i++;
}
sum += left * i;
cout << n << " " << sum << endl;
}
return 0;
}
2000.cpp 代码长度:259B 内存:144kB 时间:3ms 通过率:91% 最小内存:144kB 最短时间:0ms
题目有多组输入,以0为最后一组,可以通过while循环实现。由于输入的整数范围较小,如果编译器的int型为4个字节是足够存储的。在内层循环,对剩余的天数每次做减法,总金币数做累加,再对不够整平方的数处理加到一起,输出即可。
有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。