约瑟夫问题的流程图

约瑟夫问题的流程图,第1张

这个问题用一维数组即可解决。

这是我自己写的一段代码:

//功能:解决约瑟夫问题

#include<stdio.h>

#define N 9

#define K 2

#define M 3

//给数组赋值

void setDate(int a[],int n)

{ int i

for(i=0i<侍者如ni++)

a[i]=i+1

}

//删除被选中的孩子

void deleted(int a[],int m,int len)

{

int i=m

do

{

a[i]=a[i+1]

i++

}while(i<len)

}

//开始老启play

void play(int a[],int k,int m)

{

int len =N

int dm=k+m-2//第一个嫌数被剔除的孩子

while(len!=1)

{printf("第%d个孩子被剔除。\n",a[dm])

deleted(a,dm,len)//将被剔除的孩子从数组中删除

dm=dm+M-1//下一个被剔除的孩子

len--//数组的长度减1

if(dm>=len) dm=dm-len

}

printf("最后一个孩子是%d.",a[0])//最后一个孩子被放在a[0]中

}

main()

{

int a[N]

setDate(a,N)

play(a,K,M)

}

整喊脊个程序告信如下:

#include<stdio.h>

int Josephus(int n, int k)

{

int i, j, s, num, *a

a = new int[n+1]

j = s = 0

for (i=0i<=ni++) a[i]=1

for(i=1i<=ni++)

{

if (a[i] == 1)

{

j = j+a[i]

if (j == k)

{ j=0a[i]=0s++}

if (s == n)

{ num=ibreak}

}

if (i == n) i=0

}

delete []a

return num

}

void main()

{

int n, k, x

scanf("%d%d", &n,&k)

x = Josephus(n, k)

printf("袜渗轮%d\n", x)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12519066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存