数组实现约瑟夫环问题,用C++编写

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:07:59
我是想用一个循环,人数为n,密码为m.当报的数等于密码m时,此人出列,记下他的位置,下一个人重新从一开始报.请教高手能够按照这个思路指导我,谢谢.

#include <iostream>

using namespace std;

int main() {
int m, n;
while (cin >> n >> m) {
int* a = new int[n];
for (int i = 0; i < n; i++) a[i] = i + 1;
int j = 1; //用于报数
int k = 0; //遍历数组
int l = n; //跟踪剩余人数
while (l > 1) {//剩余人数大于1,继续报数
if (a[k]) {
if (j++ == m) { //报到m出局
j = 1; //重新报数
a[k] = 0; //记下位置
l--;//人数减1
}
}
if (++k == n) k = 0; //循环数组
}
while (a[--i] == 0); //找到最后一个人,即为答案
cout << a[i] << endl;
delete[] a;
}
return 0;
}

刚好有个现成的,楼主加分,,嘿嘿:
#include "stdio.h"
#include "stdlib.h"
#define S sizeof(struct node)

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

typedef struct node NODE;

NODE *createlinklist(int n)
{
NODE *head,*p,*q;
int