首页 > 试题广场 >

金币

[编程题]金币
  • 热度指数:18166 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。

输入描述:
输入只有1行,包含一个正整数K,表示发放金币的天数。


输出描述:
输出只有1行,包含一个正整数,即骑士收到的金币数。
示例1

输入

6

输出

14

说明

骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3+3=14枚金币。
示例2

输入

1000

输出

29820

备注:
对于100%的数据,1 ≤ K ≤ 10,000。
#include <stdio.h>
int main() {
    int k;
    int day=1;
    int sum=0;
    scanf("%d",&k);
        for(int i=1;i<=k;i++) {
            for (int j=1;j<=i;j++) {
                sum=sum+i;
                day++;
                if (day>k) {
                    goto here;
                }
            }
        }here :
    printf("%d",sum);
    return 0;
}

发表于 2025-11-29 18:34:21 回复(0)
//兄弟们,陪一个
#include <stdio.h>
#include<math.h>
#include<stdlib.h>

int main(){
    int n;//发放金币的天数
    int sum=0;
    scanf("%d",&n);
    int i,j;
    int times=0;//关键的是定义times,及对times操作吧
    for(i=1;i<=n;i++){

        for(j=1;j<=i;j++){
            if(times>=n) {printf("%d\n",sum);
    return 0;}

            times++;
            sum+=i;
        }
    }
    printf("%d\n",sum);
    return 0;
}

发表于 2025-10-13 19:42:02 回复(0)
#include <stdio.h>

int main() {
    int a, b,sum=0;
    scanf("%d",&a);
    for(b=1;b<=1000;b++){
        a=a-b;
        if(a>=0){
            sum+=b*b;
           
        }
       
        if(a<0){
            sum+=(a+b)*b;
            break;
        }
       
    }
    printf("%d",sum);
    return 0;
}
发表于 2025-08-04 19:11:08 回复(0)
// 简洁代码(大神勿喷)
#include <stdio.h>
int main()
 {
    int k = 0;
    scanf("%d", &k);
    int day = 0;
    int count = 0;
    for (int i = 1; day < k; i++)
    {
        for (int a = 1; a <= i && day < k; a++)
        {
            count += i;
            day++;
        }
    }
    printf("%d", count);
    return 0;
}

// 解释代码(大神勿喷)
#include <stdio.h>
int main()
{
    int k = 0;
    scanf("%d", &k); // 输入天数
    int day = 0; // 统计天数
    int count = 0; // 统计金币
    for (int i = 1; day < k; i++) // 从 1 金币开始,也是第 1 天开始,也相当于写了循环次数
    {
        for (int a = 1; a <= i && day < k; a++) // 发放天数 a <= i 是最多发放几天,并且总天数不能大于k
         {
            count += i; // 累计金币,每次加当前天数所发放的金币
                        // 比如第一天 i = 1,循环 1 次 每次金币 + 1
                        // 就是第二天 i = 2,循环 2 次 每次金币 + 2      
            day++; // 每发放一次,day天数就 +1 次
        }
    }
    printf("%d", count);
    return 0;
}
发表于 2025-06-19 23:40:24 回复(0)
#include <stdio.h>
#include <math.h>
int main() {
    int k, n, sum = 0;
    scanf("%d", &k);
    n = ceil(sqrt(0.25 + 2 * k) - 0.5);
    sum = (n - 1) * n * (2 * n - 1) / 6 + n * (k - (pow(n, 2) - n) / 2);
    printf("%d\n", sum);
    return 0;
}
发表于 2025-04-27 11:15:25 回复(0)
#include <stdio.h>
int main() {//国王的金币
    int n;  //一共K天
    while (scanf("%d", &n) != EOF) {
        int sum = 0;        //一共多少金币
        int t = 0;          //过去的天数,记录总的天数
        int z = 1;          //过去的天数增加周期
        int i = 0;          //每个周期过去天数的数量
        int g = 1;          //每个周期发金币的数量
        while (t != n) {
            sum = sum + g;//每天增加一次金币
            t++;//过去了t天,一直到n天
            i++;
            if (i == z) {
                i = 0;//每个周期过去天数的数量
                g++;
                z++; //过去的天数增加周期
            }
        }
        printf("%d\n", sum);
    }
    return 0;
}
发表于 2025-02-18 17:47:05 回复(0)
#include <stdio.h>
#include <math.h>
int Salary(int x) {
    int i = 0, s = 0;
    for (i = 1; i <= 150; i++) {
        s += pow(i - 1, 2);
        if (x > i * (i - 1) / 2 && x <= i * (i + 1) / 2) {
            break;
        }
    }
    return s + (x - i * (i - 1) / 2) * i;
}

int main() {
    int k = 0, salary = 0;
    while (scanf("%d", &k) != EOF) {
        salary = Salary(k);
        printf("%d\n", salary);
    }
    return 0;
}
发表于 2025-01-08 20:15:59 回复(0)
#include <stdio.h>

int main() {
    int x,sum,count,coin,alt;
    scanf("%d",&x);
    sum=0;
    alt=0;
    coin=0;
    count=0;
    for(int i=1;sum<=x;i++){
        sum+=i;
        count++;
        
    }
    for(int j=1;j<=count-1;j++){
        coin+=j*j;
        alt+=j;
    }
    int m=x-alt;
    coin+=count*m;
    printf("%d",coin);
    return 0;
}
我的做法好笨,不知道大家能不能看懂
发表于 2024-11-28 20:53:30 回复(0)
#include <stdio.h>

int main() {
    //当前天数、总天数
    int nday = 1, aday = 0;
    //总工资
    int sum = 0;
    //每天的工资
    int x = 1;
    //与工资对应的次数
    int y = 0;
    scanf("%d", &aday);
    while (nday <= aday) {
        sum = sum + x;
        y++;
        //完成一轮与工资对应的相加次数递增
        if (x == y) {
            x++;
            y = 0;
        }
        //天数递增
        nday++;
    }
    printf("%d", sum);

    return 0;
}

发表于 2024-11-26 22:19:18 回复(0)
#include<stdio.h>

int main()
{
    int k = 0;
    int i = 0 , j = 0;
    int sum = 0; //金币的总数
    int p = 0; //发的金币数
    scanf("%d",&k);
    for(i = 1 ; i <= k ;)
    {
        p += 1;
        for(j = 1 ; j<=p ;j++)
        {
            sum+=p;
            i++;  //每发一次钱天数i++
            if(i>k)  //防止在内循环中错过判断外循环的判断
                break;
        }
    }
    printf("%d\n",sum);
    return 0;
}
发表于 2024-10-27 19:35:57 回复(0)
#include <stdio.h>
int main() 
{
    int n = 0;//天数
    int a = 0, sum = 0;//金币数
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) 
    {
         a = i;
        int x = (1 + a) * a / 2;
        if (x <= n) 
        {
            while (a) 
            {
                sum += i;
                a--;
            }
            if(x==n)
            break;
        }
        else
        {
            x = (i - 1) * i / 2;
            sum += (n - x) * i;
            break;
        }
    }
    printf("%d", sum);
    return 0;
}

发表于 2024-08-05 20:29:10 回复(0)
#include <stdio.h>
#include "math.h"
int main()
{

    int data = 0;
    int sum = 0;
    int k = 1;
    scanf("%d", &data);
    for (int i = 1; k < data + 1; i++) //记录外天数
    {
        //记录内天数
        //i == 1就执行一次,每次给一个金币
        //i == 2就执行了两次,每次给两个金币
        for (int j = 0; j < i; j++) {
            if(k > data)
                break;

            sum += i;   //每次给金币数和循环次数相同
            k++;
        }
    }

    printf("%d",sum);
    return 0;
}

发表于 2024-07-01 16:33:13 回复(0)
#include <stdio.h>
int main() {
   int k;
   int sum=0,count=0;
   scanf("%d", &k);
   for(int i=1;i<=k;i++)
   {
        for(int j=1;j<=i;j++)
        {
            sum+=i;
            count++;    
            if(count==k)
            {
                break;//可能会出现不规律的情况,比如1+2+2+3+3+3+4+4+4+5+5   所以要用两次break
            }    
        }
        if(count==k)
            {
                break;
            }  
   }
    printf("%d",sum);
    return 0;
}
发表于 2024-06-19 23:11:39 回复(0)
#include <stdio.h>

int main()
{
    int k = 0;
    scanf("%d", &k);
   
    int i = 1, price = 0, ret = 0;//price求金额, ret求天数,与我输入的天数比较
    while (1)
    {
        price += i * i;
        ret += i;
        i++;

        if (ret >= k)
        {
            break;
        }
    }
    price = price - (ret - k) * (i-1);

    printf("%d\n", price);

    return 0;
}

发表于 2024-05-05 10:13:35 回复(0)
#include <stdio.h>

int main() 
{
    int i = 0,n = 0,sum = 0,sum0 = 0;
    while(scanf("%d",&n) != EOF)
    {
        
        for (i = 1;i <= n; i++)
        {
            sum += i;
            sum0 += i * i;
            if (sum == n)
            {
                
                break;
            }
            else if(sum > n) 
            {
                int temp = n - (sum - i);//此行必须定义于此!!!
                sum0 -= i * i;          //我们不需要加上此时的i * i!
             
                sum0 += temp * i;//我们要加上的是temp * i!
                break;
            }
        }
        printf("%d",sum0);
    }
    
    return 0;
}

发表于 2024-03-31 14:42:49 回复(0)
#include <stdio.h>

int main() {
      int k=1,sum=0;
      scanf("%d",&k);
      int i=1;
      int count=0;
     while((k-count)>=i){
        sum+=i*i;
        count+=i;
        i++;
     }
      if(count!=k){
        sum+=i*(k-count);
      }
      printf("%d",sum);
}

编辑于 2024-03-26 23:24:25 回复(0)
#include <stdio.h>

int main() {
    int a = 0;
    scanf("%d",&a);
    int sum = 0;
    for(int i = 1; ; i++)
    {
        a -= i;
        sum += i*i;
        if(a < i+1)
        {
            sum += a*(i+1);
            break;
        }
    }
    printf("%d",sum);
    return 0;
}
编辑于 2024-02-15 22:11:40 回复(0)