首页 » 技术分享 » 招商银行笔试题 公司年会

招商银行笔试题 公司年会

 

转载于:https://blog.csdn.net/zhui_xiuge/article/details/79867984

某公司年会上,组织人员安排了一个小游戏来调节气氛。游戏规则如下:

N个人参与游戏,站成一排来抢工作人抛来的M个小玩偶。为了增加游戏的趣味和难度,规则规定,参与游戏的人抢到的礼物不能比左右两边的人多两个或以上,否则会受到一定的惩罚。游戏结束时拥有玩偶最多的人将获得一份大奖。

假设大家都想赢得这份大奖,请问站在第K个位置的小招在赢得游戏时,最多能拥有几个玩偶?

解答:

        

https://www.nowcoder.com/questionTerminal/1bca71cd733048f890d36724f3c695eb?orderByHotValue=1&page=1&onlyReference=false
来源:牛客网

位置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;

}

 

转载自原文链接, 如需删除请联系管理员。

原文链接:招商银行笔试题 公司年会,转载请注明来源!

0