标题:Josepus问题的程序我写出来了,老是调式不成功,能帮我看看吗
只看楼主
fqb2
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2004-10-9
 问题点数:0 回复次数:4 
Josepus问题的程序我写出来了,老是调式不成功,能帮我看看吗
采用顺序存储结构编写程序实现Josepus问题

采用顺序存储结构编写程序实现Josepus问题

设有N个人围坐在一起,从第S个人开始数数到第M的人就出列,然后以出列者的下一个开始重新按上述方法数数到M就出列,如此重复直到所有人都出列,要求给出每个人的出列次序,既求一个按出列次序排列的N个人的顺序

#include <malloc.h> #include <limits.h> #include<stdio.h> #include<io.h> #include<process.h>

#define listsize 100 #define Lincremment 10

#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2

typedef int ElemType; typedef int Status;

typedef struct { ElemType *elem; int length; int listsize; }SqList;

Status InitList(SqList &L) { L.elem=(ElemType *)malloc(listsize * sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = listsize; return OK; }

Status ListInsert(SqList &L,int i,ElemType e) { int i; SqList newbase; ElemType e; ElemType *q; ElemType *p; if(i < 1 || i > L.length) return ERROR; if(L.length >= L.listsize) { newbase = (ElemType *)realloc(L.elem,(L.listsize + Lincremment) * sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L.elem = newbase; L.listsize += Lincremment; } q = &(L.elem[i - 1]); for(p = &(L.elem[L.length - 1]);p >= q;--p) *(p - 1) = *p; *q = e; ++L.length; return OK; } Status DeleteList(SqList &L,int i,ElemType &e) { int i; ElemType e; ElemType *p; ElemType *q; if((i < 1) ||(i > L.length)) return ERROR; p = &(L.elem[i-1]); e = *p; q = L.elem + L.length - 1; for(++p;p <= q;++p) *(p-1) = *p; --L.length; return e }

main() { int n; int m; int s; int a[listsize]; int i; int N; SqList L; scanf("%d",&n); scanf("%d",&m); scanf("%d",&s); for(i = 1;i <= n;i++) ListInsert(&L,i,i);

N = s + m; a[0] = ListDelete(&L,N,&e); for(i = 1;i < n;i++) { for(i = 1;i <= m;i++) { if(N > L.length) N = N + m - 1 - L.length; else N = N + m - 1; if(N <= L.length) break; } a[i] = ListDelete(&L,N,&e); } for(i = 0;i < n;i++) { printf("a[i] = %d\n ",a[0]); } }

搜索更多相关主题的帖子: 调式 Josepus 
2004-10-11 00:32
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 
哇有7个错误!我看看先,明天要回学校,好夜了,可能迟些才能回复你。
2004-10-13 01:05
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 

#include<io.h> #include<process.h> #include <limits.h>

你连三个不用的头文件都用上了,好象不用so复杂的。

下面是钱能关于那个算法的代码,终于找到了,你看一下吧!

[attach]937[/attach]
2004-10-13 01:08
kappa314
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2004-10-9
得分:0 

兄弟,你到底是用TC还是VC编程呢?

为什么不用cout和cin呢?

你的主函数里的各个变量可不可以不要那么抽象,取可以反映意义的名字作为变量名,好不好?

2004-10-17 02:55
kappa314
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2004-10-9
得分:0 

兄弟,你的主函数的函数调用语句里,怎么会有这样的:

ListInsert(&L,i,i);

这样的形式是什么意思?若是"引用"的话,应该不是这样吧?

main(){

......

ListInsert(L.i.i);

......

}

Status ListInsert(SqList &L,int i,ElemType e){

......

}

应该是这样吧!

2004-10-17 12:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-6321-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015994 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved