概述
题意:现在有一排房间每个房间里有若干的人,现在会将某个房间i里的人重新分配,分配的方法是首先让i房间里的人都出来,之后按照i+1,i+2....的顺序每个房间分一个人,n号房间的下一个房间为1号房间,这样分配下去直到i房间里的所有人都重新分配。
现在给你最后房间的人数状态和最后一个人被分配到的房间号,要求你输出原来每个房间里有多少人
思路:真的是太久没做过题了完全懵逼。。。。。。。
最笨的方法是模拟,从最后那个人被分配到房间开始往前每个房间人数减一倒推状态,直到减到某个房间人数为0没法减了那么这个房间就是被重新分配的房间。当然模拟肯定会超时。
首先我们的目的是找回最初的状态,那么任务就是要找出被重新分配的房间是哪一间。
那么一分析就会发现被重新分配的房间必然是人数最少的
【因为首先重新分配前会把房间人数清零,且按照他的方法重新分配房间i是每轮最后分到人的所以分配到的人数也必然不会比其他房间多】
但是会存在有多个房间的人数都为最少的,这时候怎么确认哪间才是被重新分配的?
这时候考虑模拟的方法就会得到结论:离最后那个人被分配的房间左边最近的那间房间就是被分配的房间
这样我们就可以大幅减少模拟
首先找出被重新分配的房间的号码和人数【这个人数就为一共循环分配了几轮】
之后把所有的房间人数-循环分配的轮数,然后从最后一个人被分配的房间向左模拟最后一轮没够所有房间的分配情况
被分配房间原本的人数就为 分配后房i的人数*房间总数+离最后被分配人的房间左侧的距离
代码等明早起来再写了
15号就机试了我也要加把劲骑士
最后
以上就是激情鸭子为你收集整理的字节跳动2018校招前端方向(第三批)题目3的全部内容,希望文章能够帮你解决字节跳动2018校招前端方向(第三批)题目3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复