国王将金币作为工资,发放给忠诚的骑士。
第1天,骑士收到1枚金币,1
之后两天,每天收到2枚金币,1 2 2
之后3天每天收到3枚金币…….。1 2 2 3 3 3
这种工资发放模式一直延续。
求给定天数,计算一个骑士获得的金币。
输入格式:
输入发金币的天数
输出格式:
输出获得的金币总数
输入样例:
在这里给出一组输入。例如:
2
输出样例:
在这里给出相应的输出。例如:
3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
首先,需要一个变量 i 表示当前行号,初始值为 1。(每一行的金币个数与该行号 i 相等。例如,第一行有 1 个金币,第二行有 2 个金币,第三行有 3 个金币……以此类推。在程序中,我们需要用 i 来记录当前行号,并通过它来计算该行的金币个数。)接着,我们需要一个变量 j,表示第 i 行中金币数量的序号,它从 1 开始计数,每次循环加一,直到 j 等于 i。这种模式可以用内部循环实现。
对当前行的金币总和需要进行累加操作,并且需要根据 n 的剩余天数来判断是否应该继续迭代。 在内部循环中,如果仍然有发放数量不为零的天,则继续迭代; 否则跳出内层循环并结束程序,输出金币数的累计总和。
代码
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n); // 读入n表示发金币的天数
int i = 1, sum = 0; // 定义i为行号,sum表示金币总数
while (n > 0) // 当发金币的天数大于0时循环
{
for (int j = 1; j <= i && n > 0; j++) // 每一行j从1到i统计金币数量,如果发金币的天数已经为0就跳出循环
{
sum += i; // 累加每次收到的金币数
n--; // 发金币的天数减少1
}
i++; // 行号加1
}
printf("%d\n", sum); // 输出金币总数
return 0;
}
测试点
本题两个测试点
第一个测试点为输出测试点,当实际输出结果与预期输出结果一致,该测试点通过