欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1100:金币 | 1969:【15NOIP普及组】金币 | OpenJudge NOI 1.5 45 | 洛谷 P2669 [NOIP2015 普及组] 金币

发布时间:2025/3/17 编程问答 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 信息学奥赛一本通 1100:金币 | 1969:【15NOIP普及组】金币 | OpenJudge NOI 1.5 45 | 洛谷 P2669 [NOIP2015 普及组] 金币 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

【题目链接】

ybt 1100:金币
ybt 1969:【15NOIP普及组】金币
OpenJudge NOI 1.5 45:金币
洛谷 P2669 [NOIP2015 普及组] 金币

【题目考点】

1. 循环

【解题思路】

国王发金币
在第1阶段,持续1天,每天给1个金币
在第2阶段,持续2天,每天给2个金币

在第d阶段,持续d天,每天给d个金币

  • 设变量d表示国王发金币的阶段,设j表示现在是在当前阶段中的第几天
  • i从1循环到n,表示天数,每天获得d个金币,j增加,并尝试更新阶段数d。
  • 或每次循环,发放一个阶段的金币。

【题解代码】

解法1:每过一天,尝试更新当前阶段

#include<bits/stdc++.h> using namespace std; int main() {int n;cin>>n;int sum = 0, d = 1, j = 1;//d:当前在第几阶段, j:在这一阶段第几天 sum:活得的总金币数 for(int i = 1; i <= n; ++i)//i:从开始算起到了第几天 {sum += d;//当前处于阶段d,第i天获得d个金币 if(j >= d)//若在当前阶段已经过了d天 {d++;//阶段数增加1 j = 1;//下一天是新的阶段的第一天 }elsej++;//处于本阶段的天数增加 }cout<<sum;return 0; }

解法2:每次发放一个阶段的金币

#include <bits/stdc++.h> using namespace std;int main() {int n, sum = 0, d = 0, i = 1;//sum:获得的总金币 d:阶段数 i:天数cin>>n;while(i <= n)//每次while循环,发放一个阶段的金币 {d++;for(int j = 1; j <= d; j++){sum += d;i++;if (i > n)break;}}cout<<sum;return 0; }

总结

以上是生活随笔为你收集整理的信息学奥赛一本通 1100:金币 | 1969:【15NOIP普及组】金币 | OpenJudge NOI 1.5 45 | 洛谷 P2669 [NOIP2015 普及组] 金币的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。