7-221 国王的金币

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

第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;
}

测试点

本题两个测试点

第一个测试点为输出测试点,当实际输出结果与预期输出结果一致,该测试点通过 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾乃宇宙欠债王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值