10.10 b站经验增长
小蒲非常喜欢刷b站,天天都去刷,作为2017年才加入b站的萌新,白嫖了好多年,积攒了上千的硬币,以至于他现在才5级,于是他想要快速积攒经验,众所周知,每天b站会给登录用户1枚硬币,1枚硬币的经验值为10经验值,每天最多可以投5枚硬币获得经验值,也就是每一天可以通过投币最多获得50经验,他想要以最快的方式通过投币获得最多的经验,直到他的硬币数为0时停止投币,请问他这期间能获得的经验值为多少,经过了多少天?
输入格式:
第一行输入一个整数T,代表数据的组数
接下来的T行,每一行有一个整数n,代表他今天拥有的硬币数(已经获得当天的奖励硬币)
输出格式:
输出T行,每一行两个数a,b,a代表他所获得的经验值,b代表经过了多少天。
输入样例:
1
6
输出样例:
70 2
第一天:他拥有6枚硬币,他投5枚,获得了50点经验值。
第二天:奖励一枚硬币,他拥有2枚硬币,他投2枚,获得了20点经验值,剩余0枚硬币。
在第一次写这个代码的时候,采取的方法只是循环嵌套,以为这样可以少思考一下,结果发现运行超时,最后采用下面算法,,少了一个嵌套的循环,大大节约了运行时间。
#include<iostream> #include<string> #include<iomanip> using namespace std; int main() { long long int n; cin >> n; long long int count_coin; for (long long i = 0; i < n; i++) { cin >> count_coin; long long int get_ = 0, day = 0,aday = 0; /*while (count_coin != 0) { if (day != 0)count_coin++; if (count_coin >= 5) { count_coin -= 5; get_ += 5 * 10; day++; } else { get_ += count_coin * 10; count_coin = 0; day++; } }*///运行超时 int flag = 1; while (1) { if (count_coin >= 5) { aday = count_coin / 5; day += aday; count_coin -= 5 * aday; if(flag)count_coin += aday - 1; else count_coin += aday; get_ += aday * 50; flag = 0; } else { day++; if (!flag) count_coin++; get_ += count_coin * 10; break; } } cout << get_ << " " << day; if (i != n - 1) cout << endl; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通