|
![]() | 作者: 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号