排队出列算法
来源:互联网 发布:php htnl模板引擎 编辑:程序博客网 时间:2024/04/28 12:05
要求:n个人围成一圈,一次编号为1...n,第一次从1报数,直到m(m>0)的那个人出列,他的下一位又从1开始,数到m的那个人再出列,就一直这样循环,直到所有人都出列,如果告诉你m和n,请编写一个程序,返回最后一个人的位置:
我的算法是:将这n个人放到一个容器中,初始值为1,当第i个人数到规定的数时,其值归零,再从下一位开始,当遇到值为0的位置时,说明这个位置已经没人了,跳过即可,且每当一个位置归零,都要判断这个数组中是否还有值为1的存在,若没有,则说明这个数组已经全部为空,当前这个归零的位置即为最后出列的位置:代码如下:
#include<iostream>
#include<vector>
using namespace std;
int flag(vector<int> que,int n)//判断是否还有人
{
int i;
for(i=0;i<n;i++)
{
if(que[i]==1)//说明这个位置有人,不用往下在查了,这个圈还有人。当然也可以用迭代器来遍历!
return 1;
}
return 0;//说明没有人了
}
int Laster(int n,int m)
{
int i,k=0;
vector<int> queue(n,1);
for(i=0;;i++)
{
if(i>=n)
{
i=0;
}
if(queue[i]==0)
continue;//这个位置没人,跳过!
else
{
k++;//报数
if(k==m)
{
queue[i]=0;//归零,代表这个人出队
k=0;//报数从新开始,下个人开始加一
if(!flag(queue,n))//判断还有没有人
{
return i+1;
}
}
}
}
}
int main()
{
int n,m;
cout<<"请输入长度n和规定的数m"<<endl;
cin>>n>>m;
cout<<Laster(n,m)<<endl;
system("pause");
return 0;
}
使用C++的原因是为了使用vector,若是使用C,则在数组的使用过程中,可能会浪费大量的空间或是空间不足,用C++就避免了这个问题。
- 排队出列算法
- 出列排序 《算法》2.1.14
- 【算法】约瑟夫环问题(报数出列)
- 算法 第四版 2.1.14 出列排序
- 猴子排队算法
- 排队论优化算法
- 猴子排队算法
- 猴子排队算法
- 排队论算法
- 《数据结构和算法》之队列的创建、入列和出列
- 贪心算法-排队问题-JAVA
- 算法提高 士兵排队问题
- 算法提高 排队打水问题
- 算法提高 排队打水问题
- 算法提高 士兵排队问题
- 算法提高 排队打水问题
- 出列排序
- 【奇偶出列】
- centos-6更新yum源(163)
- 转载:Google Dremel 原理 - 如何能3秒分析1PB
- 设计模式之原型模式
- 项目管理——细节之处见真章
- Top Android App使用的组件 2
- 排队出列算法
- Timus 1238. Folding
- 猜数字小游戏
- UML初步认识
- Top Android App使用的组件
- undo管理
- expdp impdp的使用
- 驱动之cdev
- Python学习第五天