转载于:https://blog.csdn.net/zhui_xiuge/article/details/79867984
某公司年会上,组织人员安排了一个小游戏来调节气氛。游戏规则如下:
N个人参与游戏,站成一排来抢工作人抛来的M个小玩偶。为了增加游戏的趣味和难度,规则规定,参与游戏的人抢到的礼物不能比左右两边的人多两个或以上,否则会受到一定的惩罚。游戏结束时拥有玩偶最多的人将获得一份大奖。
假设大家都想赢得这份大奖,请问站在第K个位置的小招在赢得游戏时,最多能拥有几个玩偶?
解答:
位置k的小朋友领p颗糖果,理想情况下越靠边的人比k位置的小朋友少一颗糖,正好领完m颗糖,即曲线阴影部分为m,加上直线阴影部分的糖果数s=((n - k + 1)(n - k) /2) + (k (k - 1) /2)等于n*p,即长方形的面积。
如果多出来i颗糖果的话,显然只需要考虑i小于n了,否则每个人就能多发一颗糖果还能有剩。这i颗糖果已经不能发给k位置的小朋友了,只能从边上开始发,一人一颗。那反过来求得的p就是代码中的 (m + s - i) / n。
代码:
#include <iostream> using namespace std;
int main()
{
int n, m, k;
cin >> n >> m >> k;
if (n && (k>=1 && k<=n))
{
int s = ((n - k + 1)*(n - k) >> 1) + (k * (k - 1) >> 1); //*、+优先级大于>>
for (int i = 0; i < n; i++)
{
if ((m + s - i) % n == 0)
{
cout << (m + s - i) / n << '\n'; break;
}
}
}
else cout << "0" << '\n';
return 0;
}
转载自原文链接, 如需删除请联系管理员。
原文链接:招商银行笔试题 公司年会,转载请注明来源!