求C++约瑟夫猴子选大王问题,要用数组与最基本的方法。必重谢!!! 15
描述约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内...
描述
约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
关于输入
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n <=300)。最后一行是:
0 0
关于输出
对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
例子输入
6 2
12 4
8 3
0 0
例子输出
5
1
7
提示
所给的数据中,m 未必比 n 小! 展开
约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
关于输入
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n <=300)。最后一行是:
0 0
关于输出
对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号
例子输入
6 2
12 4
8 3
0 0
例子输出
5
1
7
提示
所给的数据中,m 未必比 n 小! 展开
2个回答
推荐于2017-11-08
展开全部
//约瑟夫环---数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* s=NULL;
int result[50];
int c=0;
int i,n,m,p=0,count=0;
while(1)
{
scanf("%d",&n);
scanf("%d",&m);
if(n==0 && m==0)
{
break;
}
if(s!=NULL)
{
free(s);
}
s=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
s[i]=i+1;
}
p=0;
count=0;
while(count<n)
{
i=1;
while(1)
{
if(p>=n)
{
p=0;
}
if(s[p]==0)
{
p++;
continue;
}
if(i==m)
{
result[c]=s[p];
s[p]=0;
p++;
count++;
break;
}
i++;
p++;
}
}
c++;
}
for(i=0;i<c;i++)
{
printf("\n%d",result[i]);
}
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
using namespace std;
int f(int a[],int n)
{
int i,k=0,l;
for(i=0;i<n;i++)
{
if(a[i])
{
k++;
l=a[i];
}
}
if(k==1)return l;
else return 0;
}
void main()
{
int i=-1,j,m,n,a[100],y,*p=new int[100];
do
{
i++;
cin>>*(p+i);
}while(*(p+i));
while(*p)
{
n=*p++;
m=*p++;
for(i=0;i<n;i++)a[i]=i+1;
i=-1;
while((y=f(a,n))==0)
{
for(j=0;j<m;j++)
{
i++;
if(i==n)i=0;
if(a[i]==0)j--;
}
a[i]=0;
}
cout<<y<<endl;
}
}
using namespace std;
int f(int a[],int n)
{
int i,k=0,l;
for(i=0;i<n;i++)
{
if(a[i])
{
k++;
l=a[i];
}
}
if(k==1)return l;
else return 0;
}
void main()
{
int i=-1,j,m,n,a[100],y,*p=new int[100];
do
{
i++;
cin>>*(p+i);
}while(*(p+i));
while(*p)
{
n=*p++;
m=*p++;
for(i=0;i<n;i++)a[i]=i+1;
i=-1;
while((y=f(a,n))==0)
{
for(j=0;j<m;j++)
{
i++;
if(i==n)i=0;
if(a[i]==0)j--;
}
a[i]=0;
}
cout<<y<<endl;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询