论坛: 编程破解 标题: 一个关于C语言的问题 复制本贴地址    
作者: telnet3389 [telnet3389]    论坛用户   登录

假设10个人围成一个圈,从1开始顺序编号。从第1个人开始数,从1到3,凡是报3的人出圈。问题:最后出圈的人是原来的几号?

想了好长时间还是写不出来,应该是需要用到链表吧

请各位大侠指教!

地主 发表时间: 05-04-12 13:39

回复: qiezi [qiezi]      登录
软件设计师书上有这个例子(有完整代码)

B1层 发表时间: 05-04-12 17:58

回复: cac0527 [cac0527]   论坛用户   登录
数据结构书中有 类似问题解答
书中是用静态链表做的 很简单 主代码就是一个循环语句

B2层 发表时间: 05-04-12 20:16

回复: 286 [unique]   版主   登录
main()
{
  bool in[10]={true,true,true,true,true,true,true,true,true,true};//true为在圈里,false为在外。
  int num=10;//当前人数。
  int no=1;//当前号
  int pos=1;//当前位置
  while (num>1)
  {
      while (in[pos]==false)
      {
          pos=(pos+1)%10;
      }
      no++;
      if (no==3)
          in[pos]=false;
      pos++;
  }
  for (int i=0;i<10;i++)
      if (in[i]==true)
            printf("%d",i);
}

一次编成,不敢保证正确,请大家指正。

B3层 发表时间: 05-04-13 09:22

回复: Shell [f_h]   论坛用户   登录
C、、。。
为什么你的 num 值没变化呢?


[此贴被 Shell(f_h) 在 04月13日12时40分 编辑过]

B4层 发表时间: 05-04-13 12:36

回复: cac0527 [cac0527]   论坛用户   登录
既然版主写了个C的我就写个PASCAL的吧:(用数组实现链式结构)

program  test;
 const n=14;m=4;{设有10个人,报到4的人出列}
 var a:array[1..n] of integer;
  i,j,k,p:integer;
 begin
  for i:=1 to n-1 do a[i]:=i+1;{建立链表}
  a[n]:=1;j:=n;k:=1;p:=0;{第n人指向第1人,并置初始}
  repeat
   j:=a[j];k:=k+1;{报数,计数器加1}
   if k=m then {数到m,m人出队,计数器置1}
    begin
     write(a[j]:4);p:=p+1;a[j]:=a[a[j]];k:=1;
    end
   until p=n;{直到n个人均出队为止}
 end.

B5层 发表时间: 05-04-13 14:35

回复: 286 [unique]   版主   登录
if (no==3)
{
          num--;
          in[pos]=false;
}

谢shell兄弟的指正。
没运行过,所以现在也不能保证正常。

B6层 发表时间: 05-04-13 16:53

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号