利用数组解决约瑟夫环问题
来源:互联网 发布:体育科研数据分析 编辑:程序博客网 时间:2024/05/03 13:41
约瑟夫环问题描述:编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数, 报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程 序求出出列顺序。
我们可以利用数组解决这个问题:
#include <stdio.h>
#define N 7 /*圈里有7个人*/
void main()
{
/*circle数组的每一个数组元素表示圈内的一个人,元素的第一个域存放密码,第二个域存放与他顺时针
相邻的人得序号*/
/*count为计数器,alive为活 着的人数*/
/*prev上一个报数的人的序号,当前报数人的序号*/
int circle[N][2], count = 0, alive = N, pre = 0, cur, i, passwd;
for(i = 0; i < N; i++)
{
circle[i][1] = (i+1) % N; /*初始化next域*/
}
printf("请输入初始密码"); /*输入初始密码*/
scanf("%d", &passwd);
printf("请陆续输入圈内%d个人的密码:", i);
for(i = 0; i < N; i++) /*输入密码*/
{
scanf("%d", &circle[i][0]);
}
/*报数*/
printf("/n出列顺序为:");
for(cur = 0; alive != 0; cur = circle[cur][1])
{
count++;
if(count == passwd)
{
printf("%d ", cur);
passwd = circle[cur][0]; /*更改密码*/
circle[pre][1] = circle[cur][1]; /*前一个人的next域改变*/
count = 0; /*报数归0*/
alive--; /*活人数目减1*/
}
else
{
pre = cur; /*上一个报数的序号改变*/
}
}
}
- 利用数组解决约瑟夫环问题
- 【C#学习】利用数组解决约瑟夫环问题
- 数组解决约瑟夫环问题
- 数组解决约瑟夫环问题
- 使用数组解决约瑟夫环问题
- 03:约瑟夫环问题(数组解决)
- <c++>利用deque容器,解决约瑟夫环问题
- 利用数组实现约瑟夫环
- 约瑟夫环问题【数组】
- 约瑟夫环问题【数组】
- 约瑟夫环问题【数组】
- 【c语言】使用数组解决 约瑟夫环问题
- 用数组法解决约瑟夫问题
- 约瑟夫问题(php数组方式解决)
- java数组解决约瑟夫(Josephus)问题
- java 数组 解决 约瑟夫问题 算法
- 解决下约瑟夫环问题
- 约瑟夫环问题的解决
- Android开发之动态库调用
- 如何使用android的ndk建立native的开发环境
- 【不抱怨21天】实践手册(第十六天)-生活
- vmware虚拟机安装centos提示未找到任何驱动器
- Add Dm9000 to uboot2011.3 for frendly2440
- 利用数组解决约瑟夫环问题
- 【转】Android平台简介
- 关云长~
- android应用内调用其它android应用
- silverlight性能测试
- Ant的使用
- 关于链表的综合操作
- c# 获取网页源码
- 图片切换