n个人围成个圈由第一个人报数数到k出圈再由下一个报数数到k出圈依次输出出圈的编号n的值先设计k的值输入请pascal高手帮忙那!赏金日后会补上(奖金有20分)请个位高手援手相告

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 09:27:24
n个人围成个圈由第一个人报数数到k出圈再由下一个报数数到k出圈依次输出出圈的编号n的值先设计k的值输入请pascal高手帮忙那!赏金日后会补上(奖金有20分)请个位高手援手相告

n个人围成个圈由第一个人报数数到k出圈再由下一个报数数到k出圈依次输出出圈的编号n的值先设计k的值输入请pascal高手帮忙那!赏金日后会补上(奖金有20分)请个位高手援手相告
n个人围成个圈由第一个人报数数到k出圈再由下一个报数数到k出圈依次输出出圈的编号n的值先设计k的值输入
请pascal高手帮忙那!
赏金日后会补上(奖金有20分)
请个位高手援手相告

n个人围成个圈由第一个人报数数到k出圈再由下一个报数数到k出圈依次输出出圈的编号n的值先设计k的值输入请pascal高手帮忙那!赏金日后会补上(奖金有20分)请个位高手援手相告
var n,k,i,j,tou,num:integer;
  a:array[1..20]of integer;
  begin
  for i:=1 to 20 do
  a[i]:=0;
  read(n,k);
  for i:=1 to n do
  inc(a[i]);
  tou:=1;
  j:=0;
  repeat
  if tou>n then tou:=1
  else
  begin
  if a[tou]>0 then
  begin
  inc(num);
  if num=k then
  begin
  write(tou,' ');
  a[tou]:=0;
  inc(j);
  num:=0;
  end;
  inc(tou);
  end
  else inc(tou);
  end;
  until j=n;
  end.
  分析:
  1)我用一个数组a来保存原位置(0则表示人不在,1则表示人在).
  2)tou是用来控制当前位置的,如果人在则报数(num为她报的数,若num为k,则将他踢走,且下一人再从1开始报,即a[tou]:=0,num:=0,不为k,则下一个),若人不在,就直接看下一位置,直到有人为止.
  3)因为人数是n个,则当tou>n时,就要使tou变回原来的1,否则将无限累加,直到报错(这是很重要的问题,进入死循环程序就不会有解)
  4)其中repeat是用来记录已踢出的人数,只要条件1满足,程序就可以停止了.
  因为我很久没搞,所以程序不算最优,在第2、3、4步都可以再优化一下,使计算量减少.

n个人围成个圈由第一个人报数数到k出圈再由下一个报数数到k出圈依次输出出圈的编号n的值先设计k的值输入请pascal高手帮忙那!赏金日后会补上(奖金有20分)请个位高手援手相告 求做一个C语言题目约瑟夫问题.M个人围成一个圈,从第一个人开始报数,数到N的人出圈,再由下一个人开始报数,数到N的人出圈,输出依次出圈人的编号.M,N值由键盘输入.例如:M=8,N=5则依次出圈的 M个人围成一圈,从第一个人开始报数,数到n的人出圈.再由下一个人开始报数,数到n的人出圈,……输出依次pascal 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止.现要求按 C 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止.现要求 约瑟夫问题:M个人围成一圈,从第一个人开始依次从1到N循环报数,每当报数为N时此人出圈,直到剩一人为止请按退出次序输出出圈人原来的编号以及留在圈中的最后一个人原来的编号.请用TC编 C++习题 【出圈】问题设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一 n个人排成一个环,顺序报号,第一个人开始报(1到3循环),报到3的人退出,最后留下来的人,原来排几号位 vb求约瑟夫问题的求解:有n个人围成一个圈,由第一个人开始报数,数到第k个人,这个人 C语言程序设计,数数跳河问题,30个人,从1到9数数,数到9的就跳河!30个人围坐一圈,顺序编号为1,2,3,…,30.现在从第一个人开始数起,每数到9时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,9 C语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子 问最后留下#includestid-i(void){main(){while(1){int n,i,a[100],k=0,b[100];for(i=1;i n个人排成一个环,顺序报号,从第一个人开始报(1到3循环)报到3的人退出,最后留下来的人,原来排在几号 用递归函数计算从n个人中选择k个人组成一个委员会的不同组合数答案就是由n个人里选k个人的组合数=由(n-1)个人里选k个人的组合数+由(n-1)个人里选(k-1)个人的组合数.为什么是这个样啊 约瑟夫环问题,用C语言编写设N个人围坐一圈,并按顺时针方向1-N编号,从s个人开始报数,报到第m个人,此人出圈,后面的人继续从1到m报数,直到最后一个人, 第一个人 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出n为50 1到20数数 谁先数到20谁输?2个人玩,最多可以数三个.1到20数数 谁先数到20谁输?这个游戏怎样做?1到20数数 谁先数到20谁输?两个人数数,1个人最多可以数3个数,先数到20的输了,这个游戏有规律可 C语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子问最后留下的是原来的第几号.(不要用指针.指针还不懂.)