论坛: 编程破解 标题: 一道PASCAL问题,解约瑟夫问题 复制本贴地址    
作者: 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号