原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目描述
n
个人站成一排,按从1
到n
编号。最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾,传递方向就会改变,队伍会继续沿相反方向传递枕头。
- 例如,当枕头到达第
n
个人时,TA 会将枕头传递给第n - 1
个人,然后传递给第n - 2
个人,依此类推。给你两个正整数
n
和time
,返回time
秒后拿着枕头的人的编号
样例1:
输入
n = 4, time = 5
输出
2
队伍中枕头的传递情况为:1 -> 2 -> 3 -> 4 -> 3 -> 2 。
5 秒后,枕头传递到第 2 个人手中。
样例2:
输入
n = 3, time = 2
输出
3
队伍中枕头的传递情况为:1 -> 2 -> 3 。
2 秒后,枕头传递到第 3 个人手中。
Tag
模拟 数学
思路
一共两个方向传递:队首向队尾、队尾向队首
从头传到尾需要的次数是n-1次,我们只需要求出cnt= time/(n-1),看cnt的奇偶就知道下一次传递的方向是哪个了,接着还需要传递 time%(n-1)次,这时分类讨论即可
C++代码
class Solution {
public:int passThePillow(int n, int time) {int cnt = time/(n-1);if(cnt&1){return n-(time%(n-1));}else{return time%(n-1)+1;}}
};