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