列表

详情


BC96. [NOIP2015]金币

描述

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

输入描述

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

输出描述

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

示例1

输入:

6

输出:

14

说明:

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

示例2

输入:

1000

输出:

29820

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 284KB, 提交时间: 2022-05-31

#include<stdio.h>

int main()
{
    int n=0;//发放金币天数
    int a=0;
    int sum=0;//收到金币数
    scanf("%d",&n);
    
    int i=0;
    for(i=0;;i++)
    {
        int j=0;
        for(j=1;j<=i;j++)
        {
            sum+=i;
            a++;
            if(a==n)
                break;
        }
        if(a==n)
            break;
    }
    printf("%d\n",sum);
    
    
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2022-05-23

#include<stdio.h>
int main()
{
    // 1 2 2  3 3 3 
    int d;
    scanf("%d",&d);
    int m=1;
    int sum=0;
    int sum_day=0;
    while(1)
    {
        for(int i=1;i<=m;i++)
        {
            sum+=m;
            sum_day++;
            if(sum_day==d)
               {break;}
        }
        if(sum_day==d)
               {break;}
        m++;
       
      
    }
    
    printf("%d",sum);
    
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-08-01

#include<stdio.h>
int main()
{
    int x,day=1,sum=0;//day为当前天数,注意day开始是1;sum为此时的金币数
    scanf("%d",&x);
    for(int i=1;i<=x;i++)
    {
        if(day+i<=x)   //这一组是不是在x之前
        {
            day+=i;   //这一组结束
            sum+=i*i; 
        }
        else
        {
            sum+=(x-day+1)*i;  //用x-day+1算出剩余的天数
            break;
        }
    }
    printf("%d",sum);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-05-13

#include<stdio.h>
int main(){
    int day=0;
    int sum=0;
    scanf("%d",&day);
    int count =0;           
    for(int i=1;i<=day;i++)
    {
        for(int j=0;j<i;j++){
            sum+=i;
            count++;        
            if(count==day){
                goto here;
            }
        }
 
    }
    here: printf("%d",sum);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-03-13

#include<stdio.h>
int main()
{
    int a,i,j,b=0,sum=0;
    scanf("%d",&a);
    for(i=1;b<a;i++)            //收到i金币
    {
        for(j=1;j<=i && b<a;j++)                //收到i金币的j天
        {
            sum=sum+i;
            b++;
        }
    }
    printf("%d",sum);
}

上一题