n个人围成一圈,从1开始顺序编号;游戏开始,从第一个人开始由1到m循环报数,报到m的人退出,最后留下的人

的原来的序号,用c++求解

定义一个数组,初始值全为1,定义一个自加器,为报数,自加器为m时把离开的人的值赋为0,,自加器改为1,循环到数组到的总和为1就行了!我用C#就是这样做的!
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-09-22
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cstring>
#include <cmath>
bool a[101];
using namespace std;

int main(){
int m,n,x,y,i,j;
cin>>n>>m;
j=0;
i=0;
y=0;
for(x=0;x<=n;x++)
{
a[j]=true;
a[j]=x;
j++;
}
j=0;
do
{
if(a[j]==true)
{
y++;
a[j]=y;
}
if(y==m)
{
y=0;
cout<<j<<" ";
i++;
a[j]=false;
}
j++;
if(j==n+1)
{
j=0;
}
}while(i!=n);

return 0;
}

第2个回答  2012-03-25
循环呗,退出后再重新循环

...游戏开始,由1到m循环报数,报到m的人退出圈外,问
include <iostream>using namespace std;int main(){ const int n = 10;int N=0,m,k,num,w,u=1;int s[n];cout<<"input m"<<endl;cin>>m;k = n;for(num = 0;num< n;num++)s[num] = num+1;do{for(w=0;w<n;w++){ if(s[w] == 0) { ; } el...

N个人围成一个圈顺序编号,从第一个人开始报数(从1到M),凡报到M的人退 ...
for(i=n;i>=2;i--){ s1=(s1+m-1)%i; \/*下一个开始报数的人的编号是(s1+m-1)%i*\/ if(s1==0) \/*若s1为0,则说明要开始报数的是最后一个人*\/ s1=i;w=p[s1-1]; \/*将要出圈的人移至数组的最后*\/ for(j=s1;j<=i-1;j++)p[j-1]=p[j];p[i-1]=w;} } ...

c语言,有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m...
{int m,n,a[100],out=0,i,j=0;scanf("%d%d",&n,&m); \/*输入m,n*\/ for(i=0;i<n;i++)a[i]=i+1;while(out<n){for(i=0;i<n;i++){if(a[i]!=0)j++;if(j==m){printf("%d\\n",a[i]);out++;j=0;a[i]=0;} \/*依次打印退出人的编号*\/ if(i==n-1) br...

有n个人围城一圈.从第一个人开始报数(从1到m报数),凡报到m的人退出圈子...
设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。假设除去第k个人,则 0, 1, 2, 3,...

N个人围成一圈报数
1. 有N个人围成一圈,顺序排号,从第一个人开始报数,凡是报到M的人退出圈子,问最后留下的几号?2. N个人围成一圈,从第S个人开始顺时针1,2,3,4,...M的顺序报数,数到M的人出圈,然后从出圈的下一个人开始重复此过程,输出所有出圈的人的顺序。N个人围成一圈,从第1个人开始顺时针1,2,...

低阶约瑟夫怎么玩
低阶约瑟夫问题的玩法较为简单。它是指有n个人围成一圈,从第一个人开始报数,报到m的人出圈,然后剩下的人重新组成一圈,继续从第一个人开始报数,如此循环直到只剩下最后一个人。当n和m都比较小的时候,可以通过手算或者写代码求解。例如,当n=5,m=3时,可以把人员编号从1到5,然后按照顺序把...

[题目描述]n个人围成一圈,按1-n给每个人编号,m为要报的数,报数从编号为...
currentNum = n;while(1){ \/\/圈里只有一个人 if(currentNum == 1){ break;} outNum = m % currentNum; \/\/计算是第几个人出圈 if(outNum == 0){ outNum = currentNum;} \/\/找到出圈的人 for(loop = 0; loop < n; loop++){ if(state[loop] == 0){ outNum--;} if(out...

约瑟夫问题的两种解法
编号为1,2,...,n的n个人按照顺时针方向围坐一圈。从第一个人开始顺时针方向自1开始报数,报到m时停止报数。报m 的人出列,从他在顺时针方向的下一个人开始重新报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。其中n,m由键盘输入。【思路1】利用数组存放n个人,数组下标...

...一个圈,从1到n按顺序排好号。然后从第一个人开始顺时针报数(从1到...
关于有n个人围成一个圈,从1到n按顺序排好号。然后从第一个人开始顺时针报数(从1到如下:首先读入小朋友的数量n和报数的数字m。然后创建一个空列表,用来存储小朋友的编号。使用一个for循环,按照编号大小从小到大然后,使用一个while循环,模拟游戏的过程。循环条件为children列表的长度大于1。在循环...

...一个圈,编号依次为1~n。从第1号开始报数,报到m的倍数的人离开,一直...
int pp[256];printf("Please input n and m:\\n");scanf("%d,%d”,&n,&m);for(i=0; i<n; i++) pp[i]=i;left=n; no=0;while(left>1){ for(i=0; i<left; i++, no++){ if(no==m){ for(j=i; j<left-1; j++) pp[j]=pp[j+1];left-=1;} } }...

相似回答