约瑟夫换问题
2016-05-22 19:27
197 查看
n个人围城一个圆圈,从1开始报数,报m的人将会死去,然后再从1开始报,输出死亡的顺序。
输入:总人数n,报数的上限m
输出:淘汰的顺序。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int n,m;
printf("输入参与游戏的人数\n");
scanf("%d",&n);
printf("输入报的数\n");
scanf("%d",&m);
int *arry=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
{
arry[i]=0; //初始数组为0,表示人活着
}
int death=0; //记录死亡的人数
int index=0; //用来枚举圈中的所有位置
int numb=0; //用来记录当前所报的数
while(death!=n) //当死亡人数没有达到总数n时
{
index=index+1; //报数从1开始
if(index>n)
{
index=1; //构成循环
}
if(arry[index-1]==0) //说明第t个位置上有人,此人报数
{
numb=numb+1; //报数加1
}
if(numb==m) //此人报数为m,此人死去
{
numb=0; //报数清零
printf("%d\t",index); //输出编号
arry[index-1]=1; //标记记为1,表示该人死去
death=death+1; //死亡人数加1
}
}
printf("\n");
free(arry);
return 0;
}
输入:总人数n,报数的上限m
输出:淘汰的顺序。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int n,m;
printf("输入参与游戏的人数\n");
scanf("%d",&n);
printf("输入报的数\n");
scanf("%d",&m);
int *arry=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
{
arry[i]=0; //初始数组为0,表示人活着
}
int death=0; //记录死亡的人数
int index=0; //用来枚举圈中的所有位置
int numb=0; //用来记录当前所报的数
while(death!=n) //当死亡人数没有达到总数n时
{
index=index+1; //报数从1开始
if(index>n)
{
index=1; //构成循环
}
if(arry[index-1]==0) //说明第t个位置上有人,此人报数
{
numb=numb+1; //报数加1
}
if(numb==m) //此人报数为m,此人死去
{
numb=0; //报数清零
printf("%d\t",index); //输出编号
arry[index-1]=1; //标记记为1,表示该人死去
death=death+1; //死亡人数加1
}
}
printf("\n");
free(arry);
return 0;
}
相关文章推荐
- 关于序列的多种算法
- 手动挡汽车行驶中踩刹车必须踩离合器吗?
- RabbitMQ 一二事(3) - 订阅模式(微信公众号模式)的应用
- QT下中文显示乱码解决办法
- 深入分析C++引用
- Activity与Fragment,以及Fragment与Fragment之间的数据通讯
- 存储过程与事务
- 基于Bootstrap和Knockout.js的ASP.NET MVC开发实战
- URL编码中加入%原因
- 使用GestureDetector进行手势识别
- ASP.NET页面传值加号变空格解决办法
- Linux 监控tomcat,自动重启tomcat服务
- Tomcat进程运行监视并自动重启的脚本
- python核心编程2
- poj 2431 贪心+优先队列
- 科目三考试什么情况会被判定空挡滑行
- poj 3268 Bookshelf 2
- html
- SAX - DefaultHandler
- Windows2003操作系统SQL Server 2008安装图解(详细)