n个数排成一个圈。第一次删除m,以后每数k个数删除一次,求最
个被删除的数。当n=8,k=5,m=3时,删数过程如图1-41所示。
图 1-41
输入格式】
个被删除的数。当n=8,k=5,m=3时,删数过程如图1-41所示。
图 1-41
输入格式】
输入包含多组数据。每组数据包含3个整数n,k,m(2≤n≤10000,
1≤k≤10000,1≤m≤n)。输入结束标志为n=k=m=0。
【输出格式】
对于每组数据,输出最后一个被删除的数。
【分析】
本题是约瑟夫问题的变种,唯一的区别就是:原版问题中,从1开始
数数,而在本题中,规定第一个删除的数是m。约瑟夫问题作为链表的经
典应用,出现在很多数据结构与程序设计语言的书籍中。可惜链表法的
时间复杂度为O(nk),无法承受本题这样大的规模。
如果像本题这样只关心最后一个被删除的编号,而不需要完整的删
除顺序,则可以用递推法求解。假设编号为0~n-1的n个数排成一圈,从
0开始每k个数删除一个,最后留下的数字编号记为f(n),则f(1)=
0ÿ