9 条题解
-
5
题前吐槽
2015年,第一题也不应该这么垃圾啊!!!
也就弄点简单模拟。。。 咋有凑数的题解(还3条?
其实这数很小, 瞎搞都行(循环k天,傻的找不到规律只能每次循环都找一下加几个金币,我想
应该没人这样搞把。。。)。都这么好抄了,还有Copy按钮,能不能给个顶再看。。。
题解
设置每轮天数 ,最开始第一轮为 。如果剩余的天数m大于等于 ,则这一轮完整加入,获取金币 。如果剩余不足,则是剩余天数每天 个金币,获取 个金币。
#include <bits/stdc++.h> using namespace std; int d, m, k, sum; int main() { scanf("%d", &k); // 输入 d = 1, m = k; // 设置初始第一轮的值 while (m >= d) // 如果能够完整整完一轮 { sum += d * d; // 一轮金币 // 注意这里 m -= d,减的是没有++之前的d,否则会多减一天 m -= d; // 天数也要减,不然无限循环了 d++; // 别忘了下一轮天数+1 } sum += m * d; // 剩余天数*d,如果剩余0天其实也加了0,所以不用特判 printf("%d\n", sum); return 0; }
#include <bits/stdc++.h> using namespace std; int d, m, k, sum; int main() { scanf("%d", &k); d = 1, m = k; while (m >= d) { sum += d * d; m -= d; d++; } sum += m * d; printf("%d\n", sum); return 0; }
-
-1
同志们,居然没有Python的题解?好吧,我发一个!
思路
这题目就是一个要点:金币增加的天数(1,3,6,10……)是一个二阶的等差数列,所以可以算出来在前n天内包含几个涨薪水(即比上一次多出一个金币)的日子,然后判断是否是涨薪水的日子,是的话就涨薪水(这不废话吗)。
代码
a=int(input()) k=[] s=0 d=1 #二阶等差数列需要两个变量:(s3-s2)-(s2-s1)=d(定值) while s<a: s+=d d+=1 k.append(s) s=0 d=1 for i in range(1,a+1): s+=d if i in k: #涨工资 d+=1 print(s)
Loading:19/100……
- 1
信息
- ID
- 1404
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 655
- 已通过
- 305
- 上传者