Description
有1至 N编号的N 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)做游戏。游戏开始时,以正整数m作为报数上限值,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将其密码作为新的报数上限值,从其下一个人开始重新报数,如此下去,直至所有的人全部出列为止。如N=7,m=20,每个人的密码依次是:3,1,7,2,4,8,4,则出列顺序为6,1,4,7,2,3,5。要求最后一个出列的人的编号。
Input
有多组测试数据。每组有两行,第1行有2个正整数n,m,(n,m<100),n表示人数,m表示开始时报数上限值,第2行有n个整数,一次表示第1,2,…,个人的密码。
Output
对每组测试数据,输出最后一个人的编号。
Sample Input
7 203 1 7 2 4 8 4
Sample Output
5
题解::
本题直接模拟很简单,但是只是模拟还是不够的。
我们还可以通过数学归纳的思想进行推导。
数学推导:
前提:编号从0开始。
首先 n = 1 时 ,最后的编号 r 为0
然后假设当n = k-1 时假设最后的编号为r
则当n = k 时,
首先淘汰的是第((m-1)%k)个人,然后我们以(m%k)为基准,剩下k个人(最后剩下的为以(m%k)为基准的编号r)既最终剩下的人为(m+r)%k
所以我们得到
r = 0
r = (m+r)%k k:1->n