数组(猴子选大王)急!最好只用C++基本语言 5
有1000个以内的M个猴子,从第1个开始隔N个,最后剩下的一个就是大王,求大王的编号初学C++,最好只用数组和循环,什么private、public、bianhao()这...
有1000个以内的M个猴子,从第1个开始隔N个,最后剩下的一个就是大王,求大王的编号
初学C++,最好只用数组和循环,什么private、public、 bianhao()
这些都看不懂! 展开
初学C++,最好只用数组和循环,什么private、public、 bianhao()
这些都看不懂! 展开
展开全部
输出的第一个,即为大王的编号:
#include <iostream>
using namespace std;
int main()
{
int n,m;
cout<<"请输入猴子数量、间隔数(以空格分开,小于1000)"<<endl;
cin >>n>>m;
if(n<=0||m<=0)
{
cout<<"错误"<<endl;
return 0;
}
int i,j,k,temp;//k为次数
int A[1000];
for(i=0;i<n;i++)
{
A[i]=i+1;
}//建立数组
i=1;//设定开始报数的起始位置
for(k=n;k>1;k--)
{
i=((i+m-1)%k);//计算要报数人序号
if(i!=k-1)
{
temp=A[i];
for(j=i;j<k-1;j++)
A[j]=A[j+1];//将i位置一直到k-1位置元素向前移一位
A[k-1]=temp;//将查到的位置移动至数组最后
}
}
cout<<"最后编号反向序列:"<<endl;
for(k=n-1;k>=0;k--)
{
cout<<A[k]<<" ";//反向输出输出数组元素即为所求数列
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int n,m;
cout<<"请输入猴子数量、间隔数(以空格分开,小于1000)"<<endl;
cin >>n>>m;
if(n<=0||m<=0)
{
cout<<"错误"<<endl;
return 0;
}
int i,j,k,temp;//k为次数
int A[1000];
for(i=0;i<n;i++)
{
A[i]=i+1;
}//建立数组
i=1;//设定开始报数的起始位置
for(k=n;k>1;k--)
{
i=((i+m-1)%k);//计算要报数人序号
if(i!=k-1)
{
temp=A[i];
for(j=i;j<k-1;j++)
A[j]=A[j+1];//将i位置一直到k-1位置元素向前移一位
A[k-1]=temp;//将查到的位置移动至数组最后
}
}
cout<<"最后编号反向序列:"<<endl;
for(k=n-1;k>=0;k--)
{
cout<<A[k]<<" ";//反向输出输出数组元素即为所求数列
}
return 0;
}
展开全部
这个就是约瑟夫环。
typedef struct linknoder
{
elemtype datar;
struct linknoder *nextr;
}nodetyper;
int i,m;
nodetyper *creatt(int n)
{nodetyper *s,*r=NULL,*h;
int i;
for(i=1;i<=n;i++)
{
s=(nodetyper*)malloc(sizeof(nodetyper));
s->datar=i;s->nextr=NULL;
if(i==1)h=s;
else r->nextr=s;
r=s;}
r->nextr=h;
return h;
}
void printt(n)
{
printf("小孩原来的顺序为:\n");
for(i=1;i<=n;i++)
{
printf("%3d",i);
if(i%10==0)printf("\n");
}
printf("\n");
}
void jese(nodetyper *h,int k)
{
int i;
nodetyper *p=h,*q;
printf("游戏结束后小孩的出队顺序如下输出\n");
while(p->nextr!=p)
{for(i=1;i<k-1;i++)
p=p->nextr;
if(p->nextr!=p)
{
q=p->nextr;
printf("%3d",q->datar);
p->nextr=q->nextr;
free(q);
}
p=p->nextr;}
printf(" ");
printf("\n");
printf("幸运当选为大王的孩子是:\n");
printf("%d",p->datar);
}
youxi()/*猴子选大王游戏,也就是约瑟夫环*/
{
int n,k;
nodetyper *h;
clrscr();
textbackground(0);
textcolor(5);
printf("***********************欢迎您参加本游戏 ************************:\n");
printf("游戏简介:给定任意的正整数n,k将n当做参与这项游戏的小孩数 :\n");
printf("k当作游戏的密码将所有的小孩按序号1.2.3...排列成一个环行:\n");
printf("从第一个小孩开始,以k 为密码沿顺时针方向第 k 个小孩出队\n");
printf("依次类推直到所有的人都出列,系统会给出小孩顺序变化的比较:\n");
printf("最后出列的孩子将幸运的被选为这群孩子中的大王,十分有趣:\n");
printf("请输入游戏人数:\n");
scanf("%d",&n);
h=creatt(n);
printf("请输入游戏密码k\n");
scanf("%d",&k);
printt(n);
jese(h,k);
getch();
}
以前数据结构的一个课堂作业。用C写的。没有private等C++复杂的语法。
typedef struct linknoder
{
elemtype datar;
struct linknoder *nextr;
}nodetyper;
int i,m;
nodetyper *creatt(int n)
{nodetyper *s,*r=NULL,*h;
int i;
for(i=1;i<=n;i++)
{
s=(nodetyper*)malloc(sizeof(nodetyper));
s->datar=i;s->nextr=NULL;
if(i==1)h=s;
else r->nextr=s;
r=s;}
r->nextr=h;
return h;
}
void printt(n)
{
printf("小孩原来的顺序为:\n");
for(i=1;i<=n;i++)
{
printf("%3d",i);
if(i%10==0)printf("\n");
}
printf("\n");
}
void jese(nodetyper *h,int k)
{
int i;
nodetyper *p=h,*q;
printf("游戏结束后小孩的出队顺序如下输出\n");
while(p->nextr!=p)
{for(i=1;i<k-1;i++)
p=p->nextr;
if(p->nextr!=p)
{
q=p->nextr;
printf("%3d",q->datar);
p->nextr=q->nextr;
free(q);
}
p=p->nextr;}
printf(" ");
printf("\n");
printf("幸运当选为大王的孩子是:\n");
printf("%d",p->datar);
}
youxi()/*猴子选大王游戏,也就是约瑟夫环*/
{
int n,k;
nodetyper *h;
clrscr();
textbackground(0);
textcolor(5);
printf("***********************欢迎您参加本游戏 ************************:\n");
printf("游戏简介:给定任意的正整数n,k将n当做参与这项游戏的小孩数 :\n");
printf("k当作游戏的密码将所有的小孩按序号1.2.3...排列成一个环行:\n");
printf("从第一个小孩开始,以k 为密码沿顺时针方向第 k 个小孩出队\n");
printf("依次类推直到所有的人都出列,系统会给出小孩顺序变化的比较:\n");
printf("最后出列的孩子将幸运的被选为这群孩子中的大王,十分有趣:\n");
printf("请输入游戏人数:\n");
scanf("%d",&n);
h=creatt(n);
printf("请输入游戏密码k\n");
scanf("%d",&k);
printt(n);
jese(h,k);
getch();
}
以前数据结构的一个课堂作业。用C写的。没有private等C++复杂的语法。
更多追问追答
追问
还是看不懂啊,什么printff,jese,getch,scanf都没学过。。。基本完全不会
追答
printf输出
scanf输入
getch()获取键盘输入一个字符
jese自定函数。
没有任何非基础的东西啊。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个题也看不太懂啊,能不能我原题弄上
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询