当数到k(k>1)时,则该人被淘汰,接着从被淘汰的人下一位继续从1开始数起,数到k时淘汰第二人,依此类推,知道剩下最后一人。输出最后一人的编号,以及每一轮的结果。k的取值范围为int可表示的正整数,无需判断输入是否合法。
输出时,使用setw(3)将每个数字的输出宽度限制为3,以便查看。
C++问题 12个人围坐成一圈(编号顺时针方向依次为1~12),从1号开始数,沿顺时针方向
答案:2 悬赏:40 手机版
解决时间 2021-03-01 12:03
- 提问者网友:半生酒醒
- 2021-03-01 01:00
最佳答案
- 五星知识达人网友:青灯有味
- 2021-03-01 02:18
楼主你好
代码如下:
#include
#define max 1000
int main()
{
int n;//人数
int num[max];//标记状态
int move=0;//标记移除的人数
int m;
int i=0;
int j=0;
printf("请输入n m:");
scanf("%d%d",&n,&m);
for(i=0;i
num[i]=1;
i=0;
printf("依次淘汰的人:\n");
while(move
{
i%=n;
while(i
{
j%=m;
if(num[i]==1)
j++;
if(j==m)
{
num[i]=0;
printf("%d\n",i+1);
move++;
}
i++;
}
}
for(i=0;i
if(num[i])
{
printf("win:%d\n",i+1);
break;
}
return 0;
}
希望能帮助你哈
代码如下:
#include
#define max 1000
int main()
{
int n;//人数
int num[max];//标记状态
int move=0;//标记移除的人数
int m;
int i=0;
int j=0;
printf("请输入n m:");
scanf("%d%d",&n,&m);
for(i=0;i
i=0;
printf("依次淘汰的人:\n");
while(move
i%=n;
while(i
j%=m;
if(num[i]==1)
j++;
if(j==m)
{
num[i]=0;
printf("%d\n",i+1);
move++;
}
i++;
}
}
for(i=0;i
{
printf("win:%d\n",i+1);
break;
}
return 0;
}
希望能帮助你哈
全部回答
- 1楼网友:夜风逐马
- 2021-03-01 02:47
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int s[13];
int i,j,k;
for (i=1;i<=12;i++)
{
s[i]=i;
}
cin >> k;
int n=12;
int start=1;
while (n > 1)
{
j=k+start-1;
while (j >= n) j=j % n;
if (j == 0) j=n;
start=j;
for (i=start+1;i<=12;i++)
s[i-1]=s[i];
n--;
}
cout << setw(3) << s[1] << endl;
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯