F 最后一个是谁?(紫)
Time Limit:1000MS Memory Limit:65536K
Total Submit:15 Accepted:7
Description
在树人学习计算机并不乏味,老师经常在课余时间跟同学玩一些有趣的游戏。这就是一个有趣的游戏:老师让N个同学围成一个圈,分别编号为1,2,3,4。。。N 并从中一个开始报数,报到K的同学,出列,然后让剩下的N-1个同学开始继续报数,从报到K的下一个同学开始报数,报到K的人出列,在从剩下的N-2个同学开始报数,直到剩下最后一个人,请问,最后一个人的编号为多少
如:有8个同学围成一圈开始报数,报到5的人出列,从编号为3的人先出列,从编号为4的人报1。。。。直到编号为8 的人报到 5的时候,编号为8的同学出列,再从8号同学的下一个同学即编号为1的同学开始从1报数,则编号为6的人报到5,那么编号为6的同学出列,然后从编号为7的同学开始从1报数。。。。一直这样,直到最后一个同学为止。
你的任务就是编写一个程序,给你N个同学,报到K的人出列,从编号为M的人开始报数,求出当剩下最后一个同学的编号?
Input
输入:N K M (2 ≤ n ≤ 10000, 1 ≤ k ≤ 10000, 1 ≤ m ≤ n)(当n , k , m 都为0的时候,程序结束)
Output
输出:最后一个同学的编号
Sample Input
8 5 3 100 9999 98 10000 10000 10000
Sample Output
1 93 2019
#include<iostream.h> int main() { int n,k,m,i; while( cin >> n >> k >>m && (m != 0 && k != 0 && m != 0) ) { int temp = 0; for ( i = 2; i < n; i++ ) { temp = (temp + k ) % i; } cout << (temp + m ) % n+1 <<endl; } return 0; }