|
![]() | 作者: yga [yga]
![]() |
登录 |
设计程序解约瑟夫问题。设有M个人转坐一圈,要求从第N个人开始报数, 数到K的人出列。再从下一个人开始继续报数,数到K时又出列。・・・ ,依此下去 ,直到所有的人都出列。要求程序模拟此游戏,输出依次出列的人的编号,M、N和K从键盘临时输 入,采用图示方式运行。 谁会请给我发邮件 |
地主 发表时间: 07/02 13:20 |
![]() | 回复: 山鸡 [duck_chen] ![]() |
登录 |
学过数据结构吗?只要用单向循环连表就可以搞定了。 |
B1层 发表时间: 07/02 13:41 |
![]() | 回复: 山鸡 [duck_chen] ![]() |
登录 |
PASCAL我是不懂了,我是学C的, 我给你一个C的原代码好了,我也不知道对不,因为是我现写的。 #include<stdio.h> typedef struct node {int n; /*这是对每个人的编号*/ struct node * next; }*node; huan(node h) {int M; int i; scanf("%d",&M);/*M人一圈*/ node p; h=p=(node)malloc(sizeof(node)); h->n=1; for(i=2;i<=M;i++) {p->next=(node)malloc(sizeof(node)); p=p->next; p->n=i; } p->next=h; /*形成M个人组成的环*/ } jishu(node p) {int K; /*第K人出列*/ int count; node q; q=p; scanf("%d",&K); while(p->next=NULL) {for(count=1;count<=K;count++) q=q->next; for(count=1;count<(k-1);count++) p=p->next; p->next=q; p=q; } printf("%d",p->n); } main() {node h; huan(h); jishu(h); } 大概是这样吧,最后一个循环里边好象有些问题,自己改一下嘛. 因为我是在上网,不能花太久时间,还有一个问题,我是从第一个人开始数的,自己改一改就行了。不对之处请及时批评. [此贴被 山鸡(duck_chen) 在 7月2日19时36分 编辑过] |
B2层 发表时间: 7/2 19:39 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号