首页 > 试题广场 >

金币

[编程题]金币
  • 热度指数: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 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)
a=int(input())
sum=0
k=1
while a>0:
    if a-k>=0:
        sum+=k*k
    else:
        sum+=k*(a)
    a=a-k
    k=k+1
print(sum)


发表于 2022-03-10 22:01:44 回复(2)
// 简洁代码(大神勿喷)
#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>
int main()
{
	long int day = 0, sum = 0;
    int count = 0,i = 0;
	scanf("%ld", &day);
	for (i = 1; i <= day; i++)
	{
		int j = 0;
		for (j = 0; j < i; j++)
		{
			sum += i;
			count++;
			if (day == count)
				break;
		}
		if (day == count)
			break;
	}
	printf("%ld", sum);
	return 0;
}

发表于 2022-11-20 16:44:44 回复(0)
#include <iostream>
using namespace std;

int main()
{
    int date, sum = 0, count = 1, day = 1;
    cin >> date;
    for(int i = 1; i <= date; i++)
    {
        sum += day;
        if(i == count)
        {
            day ++;
            count += day;
        }
    }
    cout << sum;
    return 0;
}


发表于 2022-08-27 12:25:04 回复(0)
#include <stdio.h>
int main()
{
    int k,d,m=1;
    long long sum=0;
    scanf("%d",&k);
    for(d=1;d<=k;d++)
    {
        if(d>=(m*m-m)/2+1&&d<=(m*m+m)/2)
        {
            sum+=m;
        }
        else
        {
            m++;
            sum+=m;
        }
    }
    printf("%lld",sum);
    return 0;
}

发表于 2022-03-02 17:32:48 回复(0)
#include <iostream>
using namespace std;

int main()
{
    int k;
    scanf("%d", &k);
    int s = 0, d = 1;
    for (int i = 1; d <= k; i ++ )
    {
        for (int j = 1; j <= i; j ++ )
        {
            if (d > k) break;
            s += i;
            d ++ ;
        }
    }
    printf("%d", s);  
}

发表于 2022-02-27 14:28:04 回复(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 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 getgold(int n)
{
    int sum=0;//接收每天的金币
    int k=1;//过去的每一天
    for(int i=1;k<=n;i++)
    {
        for(int j=0;j<i;j++)//控制接收金币的循环次数
        {
            sum+=i;
            k++;//每次接收完金币后天数增加
            if(k>n)
            {
                break;
            }
        }

    }
    return sum;

}


int main()
{
    int day=0;
    scanf("%d",&day);
    int ret=getgold(day);
    printf("%d\n",ret);

    return 0;
}
发表于 2024-06-10 14:55:59 回复(0)
k = int(input())
n = 0
money = 0
for i in range(1,k+1):
    n += i
    money = i*i+money
    if n == k:
        break
    elif n > k:
        money = money-(n-k)*i
        break
print(money)  

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

int main() {
    int n =0;
    scanf("%d", &n);
    int i = 0;
    int j = 0;
    int k = 0;
    int count = 0;
    for(i = 1; ; i++)
    {
        for(j = 1; j <= i; j++)
        {
            k += i;
            count++;
            if(count == n)
                break;
        }
        if(count == n)
                break;
    }
    printf("%d", k);
    return 0;
}
发表于 2023-04-08 15:41:00 回复(0)
#include <stdio.h>

int main() {
    int coin = 0;
    int day = 0;
    int i = 0;
    int K = 0;
    scanf("%d", &K);
    for (i = 1; day + i <= K;day += i,i++)
    {
        coin += i*i;
    }
    if (day != K&&day < K)
    {
        coin = coin + (K - day) * i;
    }
    printf("%d", coin);
    return 0;
}

发表于 2022-12-27 22:25:57 回复(0)
#include<iostream>
using namespace std;
/*
类比数学问题:
    sum = 1*1 + 2*2 + 3*3 + ... + n*n (k>=n);
    sum = 1*1 + 2*2 + 3*3 + ... + k*n (k<n);
*/
int main() {
    int k,result=0;
    cin>>k;
    for(int i=1;k>0;i++)
    {
        if(k>=i) result+=i*i;
        else result+=i*k;
        k-=i;
    }
    cout<<result<<endl;
    return 0;
}


发表于 2022-09-27 23:07:45 回复(0)
k = int(input())
count = 1
sum = 0
while k > 0:
    if k-count >= 0:
        sum += count**2
    else:
        sum += k * count
    k = k - count
    count += 1
print(sum)

发表于 2022-07-17 13:38:30 回复(0)
#include<stdio.h>
int main()
{
    int K , coin = 0 , i = 1;
    scanf("%d",&K);
    while( K != 0 )
    {
        if( K >= i ) 
        {
            coin = coin + i * i;
            K = K - i;
            i++;
        }
        else 
        {
            coin = coin + K * i;
            break;
        }
    }
    printf("%d",coin);
    return 0;
}

发表于 2022-06-16 11:01:04 回复(2)
import java.util.*;
public class Main{
  public static int getcoin(int n) {
      int cion=0,num=0;
      for(int i=1;num<n;i++){
           for(int j=1;j<=i&&num<n;j++){
               cion+=i;
               num++;
            }
         }
    return cion;
  }
public static void main(String love[]){
   Scanner input=new Scanner(System.in);
   int n=input.nextInt();
    System.out.print(getcoin(n));
     input.close();
} 
}

发表于 2022-05-12 11:22:09 回复(0)
#include<stdio.h>
/*
类比数学问题:
    sum = 1*1 + 2*2 + 3*3 + ... + n*n (k>=n);
    sum = 1*1 + 2*2 + 3*3 + ... + k*n (k<n);
*/
int main()
{
    int k;
    int i = 1;
    int result = 0;
    scanf("%d", &k);
    while(k>0)
    {
        if(k >= i)
            result += i*i;
        else
            result += k*i;
        k -= i;
        i++;  
    }
    printf("%d\n", result);
    return 0;
}

发表于 2022-03-07 19:00:54 回复(0)
#include <stdio.h>
int test(int x)
{
    int i=1;
    int count=0;
    if(x==0)
    {
        return 0;
    }
    while(x>0)
    {
      x=x-i;
      i++;
      count++;
    }
    return count;
}
int main()
{
  int K=0;
  scanf("%d",&K);
  int term=test(K);
  int arr[term];
  int i=1;
  while(K>0)
  {
    if(K-i>0)
    {
    arr[i-1]=i;
    }
    else {
    arr[i-1]=K;
    }
    K=K-i;
    i++;
  }
  int sum=0;
for(int j=0;j<term;j++)
{
  sum=sum+(j+1)*arr[j];
}
printf("%d",sum);
return 0;
}
发表于 2025-12-02 15:52:12 回复(0)
#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)