小小wu~ 发表于 2023-12-14 19:17:21

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第...

题目描述
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币,……这种工资发放模式会一直这样延续下去:当连续N
天每天收到N
枚金币后,骑士会在之后的连续N+1
天里,每天收到N+1
枚金币。

请编程计算在前K
天里,1≤K≤10000
,骑士一共获得了多少金币。

输入描述
一行一个正整数K
,表示发放金币的天数。

输出描述
一行一个正整数,表示骑士收到的金币数。


我的代码如下:#include<bits/stdc++.h>
using namespace std;
int main()
{
    int k,i,j,day=0,sum=0;
    cin>>k;
    int count=0;
    for(i=1;;i++)
    {
      for(j=1;j<=i;j++)
      {
            day++;
            sum=sum+i;
            if(day==k)
            {
                cout<<sum<<endl;
            }
      }
    }
}


请问这个哪里错了

FishC 发表于 2023-12-14 19:17:33

你的代码思路是正确的,使用两个循环嵌套来模拟金币发放的规律。但是你的代码缺少退出循环的条件,导致程序无法结束。另外,变量`count`没有用到。

下面是修改后的代码:

++
#include <iostream>
using namespace std;

int main()
{
    int k, day = 0, sum = 0;
    cin >> k;
   
    int count = 0;
    for (int i = 1; day < k; i++) {
      for (int j = 1; j <= i; j++) {
            day++;
            if (day > k) {
                break;
            }
            sum += i;
      }
      count++;
    }
   
    cout << sum << endl;

    return 0;
}

这里使用了一个外层循环 `i` 来控制每一组金币发放的天数,内层循环 `j` 来计算每一天的金币数量。当 `day` 大于 `k` 时,就退出循环,不再进行计算。循环结束后,输出骑士收到的金币数量 `sum`。

希望对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第...