C语言约瑟夫环问题,怎么去掉那个人 20

【问题描述】约瑟夫环问题:编号为1,2,3,…,n的n(n<=100)个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m(m<=100)作为报数上限... 【问题描述】约瑟夫环问题:编号为1,2,3,…,n的n(n<=100)个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m(m<=100)作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。【输入形式】第一行输入两个数 n,m。接下来的n行输入一个正整数分别为每个人所持有的密码。【输出形式】出列顺序【样例输入】5 63 2 1 4 5【样例输出】1 4 5 2 3 展开
 我来答
匿名用户
2017-11-12
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
char cmd[50];
sprintf(cmd,"mode con cols=%d lines=%d\0",120,36);
system(cmd);//改变CMD窗口大小
srand((unsigned)time(0));
int a[100];
int i,j,n,m,pos;
printf("input n m :");
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)  //为了简便,直接用随机数生成各自密码
{
a[i]=rand()%20+1;
}
for(i=0;i<n;i++)
{
printf("%d(pw:%d) ",i+1,a[i]);
}
printf("\n");
pos=0;j=0;
int count=0;
while(n>0)
{
while(1)
{
if(a[pos]!=0)
{
j++;
if(j==m)
{
printf("%d(pw:%d) ",pos+1,a[pos]);
count++;

m=a[pos];
a[pos]=0;

j=0;
}
}
pos++;
if(pos>=n)
{
pos=0;
}
if(count==n)
{
break;
}
}
if(count==n)
{
break;
}
}
return 0;
}
更多追问追答
追问
请问你有没有看题目?
追答

请问你有没有仔细看代码?

为了尽量减少输入, 稍微变一下就不知道了?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式