永发信息网

C++问题 12个人围坐成一圈(编号顺时针方向依次为1~12),从1号开始数,沿顺时针方向

答案:2  悬赏:40  手机版
解决时间 2021-03-01 12:03
  • 提问者网友:半生酒醒
  • 2021-03-01 01:00
当数到k(k>1)时,则该人被淘汰,接着从被淘汰的人下一位继续从1开始数起,数到k时淘汰第二人,依此类推,知道剩下最后一人。输出最后一人的编号,以及每一轮的结果。k的取值范围为int可表示的正整数,无需判断输入是否合法。
输出时,使用setw(3)将每个数字的输出宽度限制为3,以便查看。
最佳答案
  • 五星知识达人网友:青灯有味
  • 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;
}

希望能帮助你哈
全部回答
  • 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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯