用C语言顺序表实现约瑟夫环问题
时间: 2023-05-13 19:06:50 浏览: 167
可以使用循环链表来实现约瑟夫环问题,也可以使用顺序表来实现。以下是使用C语言顺序表实现约瑟夫环问题的代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void InitList(SqList *L) {
L->length = 0;
}
void CreateList(SqList *L, int n) {
int i;
for (i = 0; i < n; i++) {
L->data[i] = i + 1;
}
L->length = n;
}
void Josephus(SqList *L, int k, int m) {
int i, j, s;
s = k - 1;
for (i = L->length; i > 1; i--) {
s = (s + m - 1) % i;
printf("%d ", L->data[s]);
for (j = s; j < i - 1; j++) {
L->data[j] = L->data[j + 1];
}
}
printf("%d\n", L->data[0]);
}
int main() {
SqList L;
int n, k, m;
printf("请输入人数n:");
scanf("%d", &n);
printf("请输入起始位置k:");
scanf("%d", &k);
printf("请输入报数m:");
scanf("%d", &m);
InitList(&L);
CreateList(&L, n);
printf("出列顺序为:");
Josephus(&L, k, m);
return 0;
}
在这个程序中,我们使用了SqList结构体来表示顺序表,其中data数组存储了顺序表中的元素,length表示顺序表的长度。InitList函数用来初始化顺序表,CreateList函数用来创建顺序表,Josephus函数用来解决约瑟夫环问题。在主函数中,我们通过用户输入来确定人数n、起始位置k和报数m,然后调用Josephus函数来求解约瑟夫环问题。
阅读全文