问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言编程Josephus问题

发布网友 发布时间:2022-05-24 07:15

我来回答

4个回答

热心网友 时间:2023-10-08 16:41

/*这个答案我不是已经给过了吗?
好象被删掉了,再给你发一次吧,补充一下,应作者要求,在这里解释一下代码的意思,我晕死.*/
#include <stdio.h>
#include <stdlib.h>
#define max 1024
void findout(int n,int m)//这函数的作用是找出最后剩下的小孩
{
int buf[max];//max上面有定义,为1024,大小你看实际需要改
int dex=0;
int in=0;
for(int i=1;i<=n;i++)//n是小孩的个数
{
buf[i]=i;//给小孩赋号码,第几个小孩,号码就为几
}
while(n>in+1)//剩下小孩个数大于1的时候才执行
{
for(i=1;i<=n;i++)//遍历所以小孩
{
if(buf[i]!=0)//小孩号码不为0的时候
{
dex++;
if(dex==m)//若是数到m,
{
buf[i]=0;//则把小孩号码改成0
in++;//被排除的小孩个数加1
dex=0;//判断值清0,从新开始找
}
}
}
}//while.退出的时候只剩下一个小孩
for(i=1;i<=n;i++)
if(buf[i]!=0)
printf("最后的小孩号码为:%d\n",buf[i]);//打印小孩的号码

}
void main()//这个函数够简单吧,这个自己看,我累死了
{
int n,m;
char c='y';
printf("#############测试开始了#############\n");
printf("\n");
while(c=='y')
{
printf("请输入小孩的个数:");
scanf("%d",&n);
printf("请输入m的值?:");
scanf("%d",&m);
if((n>0)&&(m>0))
{
findout(n,m);
}
else
{
printf("输入有误\n");
}
printf("继续吗?y or n\n");
getchar();
c=getchar();
}
printf("\n");
printf("#############测试结束了############\n");
}

热心网友 时间:2023-10-08 16:42

/*这个答案我不是已经给过了吗?
好象被删掉了,再给你发一次吧,补充一下,应作者要求,在这里解释一下代码的意思,我晕死.*/
#include
#include
#define
max
1024
void
findout(int
n,int
m)//这函数的作用是找出最后剩下的小孩
{
int
buf[max];//max上面有定义,为1024,大小你看实际需要改
int
dex=0;
int
in=0;
for(int
i=1;i<=n;i++)//n是小孩的个数
{
buf[i]=i;//给小孩赋号码,第几个小孩,号码就为几
}
while(n>in+1)//剩下小孩个数大于1的时候才执行
{
for(i=1;i<=n;i++)//遍历所以小孩
{
if(buf[i]!=0)//小孩号码不为0的时候
{
dex++;
if(dex==m)//若是数到m,
{
buf[i]=0;//则把小孩号码改成0
in++;//被排除的小孩个数加1
dex=0;//判断值清0,从新开始找
}
}
}
}//while.退出的时候只剩下一个小孩
for(i=1;i<=n;i++)
if(buf[i]!=0)
printf("最后的小孩号码为:%d\n",buf[i]);//打印小孩的号码
}
void
main()//这个函数够简单吧,这个自己看,我累死了
{
int
n,m;
char
c='y';
printf("#############测试开始了#############\n");
printf("\n");
while(c=='y')
{
printf("请输入小孩的个数:");
scanf("%d",&n);
printf("请输入m的值?:");
scanf("%d",&m);
if((n>0)&&(m>0))
{
findout(n,m);
}
else
{
printf("输入有误\n");
}
printf("继续吗?y
or
n\n");
getchar();
c=getchar();
}
printf("\n");
printf("#############测试结束了############\n");
}

热心网友 时间:2023-10-08 16:42

int main()
{
int children, m, winner, i;
int *circle, *p;

/* 从用户得到输入,人数和m值 */
printf("Input children number,m value:");
scanf("%d,%d", children, m);

/* 创建数组,并初始化为1,1表示这个位置有人 */
circle = malloc(sizeof(int) * children);
for (p=circle; p - circle <= m; p++) {
*p = 1;
}

p = circle;
count = children; /* count记录目前还剩下的人 */
do {
/* 如果当前只剩一个人,则这个人就是获胜者,算法结束 */
if (count == 1) {
winner = p - circle;
break;
}
/* 否则把这个位置设置为无人,算法继续 */
*p = 0;
count--;

/* 在剩下的人中数出第m个人 */
for (i = 0; i < m; i++) {
/* 找到下一个有人的位置 */
while (*((((++p) - circle) mod children) + circle)!= 1) ;
}
} while(1);

printf("The winner is %d \n", winner);
free(circle);
return 0;
}

没有上机测试,你自己调一下吧。时间比较紧,有些地方写的粗糙,比如对用户输入要做一下合法性判断。

热心网友 时间:2023-10-08 16:43

#include<stdio.h>
#include<conio.h>
main()
{
int
*arrChild,iChild,m,iCount,iSkip,iCur;
printf("Please
input
the
number
of
the
children:\n");
scanf("%i",&iChild);
printf("Please
input
the
random
number
m:\n");
scanf("%i",&m);
if
(m>iChild)
m=m%iChild;
arrChild=new
int[iChild];
for
(int
i=0;i<iChild;i++)
arrChild[i]=0;
for
(iCount=iChild;iCount>1;iCount--)
{
if(m>iCount)
m=m%iCount;
iCur=0;
for(int
i=0;i<iChild;i++)
{
if(arrChild[i]==0)
iCur++;
if
(iCur==m)
{
arrChild[i]=1;
break;
}
}
}
for
(int
i=0;i<iChild;i++)
{
if
(arrChild[i]==0)
{
printf("The
%i
child
is
the
winner.\n",i+1);
break;
}
}
getch();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
提升学历选自考好还是成考好 成考和自考的文凭哪个好 2024年成人自考和成人高考哪个更好 家用净水器滤芯类型有哪些 家用净水器什么滤芯好 请问在VB中如何调用多线程? 交强险理赔后第二年上涨吗? 交强险出一次险第二年保费多出多少? 全家人都爱吃的家常菜目录 丽台Quadro P5000专业图形显卡-购买最佳价格 描写解决约瑟夫问题的算法,按出列顺序组成新的表,然后再输出 Josephus环算法的设计 流程图 怎样用vb实现约瑟夫环算法?? josephus问题数据结构C 编写C语言算法,试编写一个求解Josephus问题的函数,用整数序列1, 2, 3, …… 约瑟夫环的算法原理 求解josephus问题的算法 什么是约瑟夫法则 用弹簧测力计探究动滑轮的省力特点的视频 弹力测力计的使用方法 如题 快影制作视频封面微信发却没有 sql group 后按分组数量的多少排序怎么写? 求助asp 中group by 的用法是什么啊!! 急!急!为什么有时用groupby结果还是显示同一个人的记录 sql group by 排序问题 sort by 和 group by 的区别是什么? SQL中的group by为什么是按照分组的第二个字段排序的呢? 怎样做网站优化,使其在搜索引擎中排名靠前。 男孩儿SEO博客:如何建立一个成功的品牌型的网站 设计单片机低频信号发生器,要求使用汇编语言,片选方式 基于单片机和DAC0832做的低频信号发生器 约瑟夫环问题的C++算法,求用链表和递归两种方法,尽量详细! josephus problem 约瑟夫环 C语言 试用循环链表为存储结构,写一个约瑟夫问题的算法。 求c++程序设计“约瑟问题”的算法 约瑟夫难题的约瑟夫指的是哪位约瑟夫? 《假面骑士W》免费在线观看完整版高清,求百度网盘资源 没有壳的蛋能否放进微波炉呢? 鸡蛋(没脱壳)为什么不能放在微波炉里叮呢? 一兆瓦是多少度 60版2元人民币的价格表? 60版2元纸币编号6888888有收藏价值吗? M1的USB接口在接普通U盘的时候可以识别,在接移动硬盘的时候不能识别 吉利星越L雷神Hi·X油电混动版12月25日预售 最大续航1300公里 吉利星越L雷神Hi·X油电混动版月底开售 最大续航1300公里 我的移动硬盘无法读取怎么回事 我的世界有没有办法隐藏章鱼 删除章鱼tv我看风云直播出现章鱼插件按装完成?怎样删掉它? 我原来看别人下载了个软件,图标是个红色的小章鱼 C# 的应用程序怎么打包成setup可执行文件, 发布之后要在没有安装.net framework 用inno setup打包安装工具生成的EXE程序,在安装的时出现【试图在初始化之前展开“app”常量】怎么解决?