1.問題描述
q1.已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號爲k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。
q2.已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號爲k的人開始報數,數到m的那個人出列;原先編號爲n的數是第幾個出列的。
2.編程實現
q1 solution:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int n,m,k;
cin >>n>>m>>k;
queue<int> q;
for(int i=k;i<=n;i++)
q.push(i);
for(int i=1;i<k;i++)
q.push(i);
while(q.size()>1)
{
for(int i=0;i<m-1;i++)
{
q.push(q.front());
q.pop();
}
q.pop();
}
cout<<q.front()<<endl;
return 0;
}
q2 solution:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int n,m,k;
int res=0;
cin >>n>>m>>k;
queue<int> q;
for(int i=k;i<=n;i++)
q.push(i);
for(int i=1;i<k;i++)
q.push(i);
while(q.size()>1)
{
for(int i=0;i<m-1;i++)
{
q.push(q.front());
q.pop();//刪除第一個元素
}
res++;
if(q.front()==n)
break;
else
q.pop();
}
cout<<res<<endl;
return 0;
}