切换到宽版
  • 5418阅读
  • 3回复

问一个不算难的问题 [复制链接]

上一主题 下一主题
离线wzy
 
只看楼主 倒序阅读 0 发表于: 2007-11-13
Problem
将编号为1,2,...,N的N个人按顺时针方向围坐一圈,每人持有一个密码(10000以内的正整数)。一开始任选一个正整数作为报数上限值M,从第一个开始按顺时针方向自1开始报数,报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。

Input
本题有多组数据。每组数据的第一行是两个整数N,M(0<N,M<100),第二行是N个正整数,分别表示1到N个人持有的密码。

两组数据之间空开一行。

Output
对每组数据,按离开的顺序输出他们的编号。数字之间用一个空格分开。每组数据独占一行输出。

Sample Input

7 20

3 1 7 2 4 8 4


Sample Output

6 1 4 7 2 3 5
离线qq313024503
只看该作者 1 发表于: 2007-11-13
有点象约翰夫问题
离线wzy
只看该作者 2 发表于: 2007-11-14
拜托 !! 我需要解法!!
离线aishanmei
只看该作者 3 发表于: 2008-01-29
想了好久,比比赛花的时间更多啊!看来我老了!我想这个应该可以吧!不太完善!多多指教!
var n,m,f,i,t,s,j,s2:integer;
a,b,c:array[1..100]of integer;
begin
read(n,m);
f:=n;
for i:=1 to n do begin
read(a); c:=0;end;
t:=0;
s:=m mod n;
b[1]:=s;
c[s]:=1;
for i:=2 to n-1 do begin
f:=f-1;
t:=a[b[i-1]] mod f;
b:=(t+b[i-1])mod 7;
for j:=b[i-1]+1 to b do
begin
s2:=0;
if c[j]=1 then s2:=s2+1;end;
b:=s2+b;
c[b]:=1;
end;
for i:=1 to n do
if c=0 then b[n]:=i;
for i:=1 to n do write(b);
end.
快速回复
限100 字节
 
上一个 下一个