试编写一个求解Josephus问题的函数。用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人,并采用数组 10
1个回答
展开全部
#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=0; i<=n; i++)
a[i]=1;
for(i=1; i<=n; i++)
{
if (a[i] == 1)
{
j = j+a[i];
if (j == k)
{
j=0;
a[i]=0;
s++;
}
if (s == n)
{
num=i;
break;
}
}
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);
}
int Josephus(int n, int k)
{
int i, j, s, num, *a;
a = new int[n+1];
j = s = 0;
for (i=0; i<=n; i++)
a[i]=1;
for(i=1; i<=n; i++)
{
if (a[i] == 1)
{
j = j+a[i];
if (j == k)
{
j=0;
a[i]=0;
s++;
}
if (s == n)
{
num=i;
break;
}
}
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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询