这是我自己写的一段代码:
//功能:解决约瑟夫问题
#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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)