回 帖 发 新 帖 刷新版面

主题:有哪位大侠会做这道题?

选夏令营旗手
    【问题描述】一年一度的江苏省“信息与未来”小学生夏令营活动又开始了。
     与每年一样,组织者又设计安排了许多有趣的活动,其中第一项依然是挑选
     本次夏令营的旗手!由于这是一个非常具有荣誉感的角色,
     所以报名参加夏令营旗手角逐的营员仍然非常多,营委会于是规定:
     将N个人排成一排,编号1~N。从第1人开始进行1~M正向报数,报到M的人出列,
     再从下一个人开始继续1到M报数、出列。(注意:按某个方向报数报到尾部时,
     再反方向继续报数)。
     如此进行下去,直到剩下一人为止,这个人就是本次夏令营的旗手。
     小明非常渇望能成为旗手,你能编一个程序帮助他实现愿望吗?
     如果可以的话,你的程序应输出小明的编号。
     输入:键盘输入二个整数N,M(2≤N,M≤300,N≥M),用一个逗号分隔。
     输出:输出到屏幕。一个整数,表示小明在队列中的编号。
     样例1:
     输入     输出
     9,3       8        注:出列顺序为:3、6、9、5、1、7、2、4  

     样例2:
     输入     输出
     8,3       8        注:出列顺序为:3、6、7、2、5、1、4

回复列表 (共1个回复)

沙发


program baoshu10;
var
a:array[1..300]of 0..1;
n,m,i,s,k:integer;
begin
readln(n,m);
s:=0;k:=0;
for i:=1 to n do a[i]:=1;
repeat
  for i:=1 to n do
  begin
    k:=k+a[i];
    if (s=n-1) and (k=1) then begin write(i);halt;end;
    if k=m then begin a[i]:=0;s:=s+1;k:=0;end;
  end;
  if k<>0 then k:=k-1;
  for i:=n downto 1 do
  begin
    k:=k+a[i];
    if (s=n-1) and (k=1) then begin write(i);halt;end;
    if k=m then begin a[i]:=0;s:=s+1;k:=0;end;
  end;
  if k<>0 then k:=k-1;
until s=n;
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册