BC96 金币

每日一言

我有故人抱剑去,斩尽春风未曾归。 --孤山不孤


牛在客网上,发现了一道有意思的题,想分享一下解题的思路与过程。

题目

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


这道题我有三种解法
法一与法二思路差不多,法三就要思考一下了

法一:

基本思路:一天一天计算总金币数,设置一个变量,当天数到达时跳出循环,这里使用goto语句跳出

 #include<stdio.h>
 int main()
 {
     int d = 0;//天数
     int sum = 0;//总金币数
     int i = 0;
     int j = 0;
     int a = 0;//用来判断天数是否到了
     scanf("%d", &d);
     for (i = 1; i <= d; i++)
     {
         for (j = 1; j <= i; j++)
         {
             sum += i;//这里是加等i,因为i的值是 1 2 2 3 3 3... 这样变换的.
             a++;
             if (a == d)
                 goto v;//跳出双层循环
         }
     }
 v:
     printf("%d", sum);
     return 0;
 }

法二:

基本思路:一天一天计算总金币数,设置一个变量,当天数到达时跳出循环,这里满足k>data跳出

 #include<stdio.h>
 int main()
 {
     int data = 0;
     int sum = 0;
     int k = 1;
     scanf("%d",&data);
     for(int i = 1;k<=data;i++)
     {
         for(int j = 0;j<i;j++)
         {
             if(k>data)
                 break;
                 sum+=i;
                 k++;
         }
     }
     printf("%d",sum);
     return 0;
 }


法三:

基本思路:将金币数相同的天数看成整体,先计算全部整体的金币数,最后减去超出的金币数,

 #include<stdio.h>
 int main()
 {
     int k;
     scanf("%d", &k);
     int i =1;
     int sum = 0;
     int cnt = 0;
     while(cnt < k)
     {
         cnt += i;
         sum += i*i;
         i++;
     }
     sum -= (i-1) * (cnt - k); //减去超过k的天数
     printf("%d", sum);
 }

在这里插入图片描述
图下面的sum是while循环里的sum。


结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
想成为大佬那就保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

月临水

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

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

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

打赏作者

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

抵扣说明:

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

余额充值