ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

金币问题

2021-03-27 19:51:14  阅读:916  来源: 互联网

标签:tmp 问题 收到 int sum 金币 data


题目描述

* 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;依次类推。。当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。

输入样例:输入 6    输出   14
                                    输入  1000     输出   29820
骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3=14枚金币。

C++代码实现

  • 计算每天工资,再累计
    
    #include <iostream>
    using namespace std;

int main()
{
int data; //几天
cin >> data;
int tmp = 1; //每天的工资
int sum = 0; //总工资
for (int i = 0, j = 0; i < data; i++)
{
sum += tmp;
j++;
if (j >= tmp){ //涨工资
tmp++;
j = 0;
}
}
cout << sum << endl;

system("pause");
return 0;

}

* 转换思路:假设连续N天的 N个金币  全部发给骑士,当计算的日期超过实际日期时,减去未发的金币。代码实现如下:

#include <iostream>
using namespace std;

int main()
{
int data; //实际几天
cin >> data;
int tmp = 1; //每天的工资
int sum = 0; //总工资

int t = 0;

while (t < data)    //t>=data停止
{   
    sum += tmp*tmp; //假设全发给骑士
    t += tmp;       //天数
    tmp++;      
}
//注意此时每天的工资是 tmp-1
sum -= (t - data)*(tmp-1);      //实际应发的工资

cout << sum << endl;

system("pause");
return 0;

}

标签:tmp,问题,收到,int,sum,金币,data
来源: https://blog.51cto.com/15080913/2674670

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有