Josephus问题,

Leeu 2003-09-12 10:30:47
设有N个的围坐在一个圆桌,现从第S个的开始报数,数到第M 的个出列,然后从出列的下一个人重新开始报数,数到第M的人又出列,如此重复到所有人出列,求出出列的顺序。现一般化,N=8,S=1,M=4。
我自己按书上用C语言编一个程序,但就是调试不出来,我不知道自己的程序错在何处,请兄弟帮帮忙,指导下。
(我把它倒序排在同一个数组中)
#include <stdio.h>
void main()
{
int i,j,w,s1,a[9]={0,1,2,3,4,5,6,7,8};
s1=1;
for(i=8;i>1;i--)
{
s1=(s1+4-1)%i;
if(s1=0) s1=i;

w=a[s1];
for(j=s1;j<=i;j++)
a[j]=a[j+1];
a[i]=w;

}
for(i=8;i>0;i--)
printf("%d ",a[i]);
}

我现在大三了,学计算机的,这是数据结构上的问题,郁闷的是学校用的是PASCAL语言版,我们没学那,就学了C,搞得---------唉
我的QQ31935199
E-MAIL:yidian14159@163.com
想找几个兄弟讨论学习中遇到的问题
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huylghost 2003-12-20
  • 打赏
  • 举报
回复
up
Leeu 2003-09-13
  • 打赏
  • 举报
回复
TO tuxw(醉书生) ]
谢谢了,你的程序我试了没问题
发分了
Leeu 2003-09-13
  • 打赏
  • 举报
回复
to ZhangYv()
谢谢!!我找到了那个程序,不过运行很慢,我还以为死机了,
结果明显不对。怎么可能是4,5,3,6,2,1,8,7
to ZhangYv()
谢谢了,果然是那个小地方出错了,我运行了一下很快,结果也结了,
书上都是类PASCAL写的,回来还得自己改写,好累,不过也好,多练练也好。
tuxw 2003-09-13
  • 打赏
  • 举报
回复
// 这是个用循环链表做的

#include <ASSERT.H>
#include <IOSTREAM.H>

struct node {
int d;
node *next;
};

node *h, *t, *p;

void main()
{
int N=8, M=4, S=1, cnt=1;


// 分配N个结点,并给其编号
for(int i=0; i<N; i++) {
p = new node;
assert(p);
p->d = i+1;
p->next = NULL;

if(h == NULL) // h 定义为全局的,或定义时初始化为NULL
h=t=p;
else {
t->next = p;
t = p;
}
}
t->next = h; // 链接成循环链表


// 移动起始到第S-1个
// 最好保证S<N,但这个是循环链表,不保证也可,但结果可能不为所期
p = t;
while(S-->1) p = p->next;

while(1) {
// 向后移动M-1次指针,下一个则为出列对象
for(int j=0; j<M-1; j++)
p = p->next;
if(p->next == p) break; // 只有一人剩下了

node *c= p->next;
cout << "第" << cnt++ <<"个出列的是\t" << c->d << endl;
p->next = c->next;
delete c;
}

p->next = NULL;
cout << "最后留下的是\t " << p->d << endl;

delete p;
}
Peterwby 2003-09-13
  • 打赏
  • 举报
回复
没细看,不过这句if(s1=0)一般应该写成if(s1==0) 吧?是不是你写错了?
ZhangYv 2003-09-12
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2059/2059607.xml?temp=.8516809
这里有吧自己找找,PASCAL没什么不好的。我初学语言也是PASCAL,它的优点是结构严谨,很适合教学和算法描述。在算法方面我几乎都是看PASCAL或类PASCAL的。C/C++不适合描述算法和数据结构,而且C++现在已过于庞大和复杂,也已经不适合普通的开发,可以说学习C++很多只是为了学习“编程的艺术”。其实PASCAL很好的,只不过被很多人误解了!
klbt 2003-09-12
  • 打赏
  • 举报
回复
关注。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧