描述:
有n个人围成一圈,顺序编号。从第一个人开始报数(从1到m),凡报到m的人退出。问最后一个人的编号是多少?
输入:
输入两个正整数n和m
输出:
最后一个人的编号。
输入样例:
5 2
输出样例:
3
//用队列模拟会比较好想_(:з」∠)_2018.8.9
#include<iostream>
using namespace std;
int main()
{
int n,m,i,j=0,c=0,d;
cin>>n>>m;
int a[n];
for(i=0;
i<n;
i++)
{
a[i]=1;
}
j=j-1;
for(i=0;
i<n;
i=(i+1)%n)
{
if(a[i]!=0)
{
j=(j+1)%m;
}
if(j==m-1&&a[i]!=0)
{
a[i]=0;
c=c+1;
}
if(c==n-1)
{
break;
}
}
for(i=0;i<n;i=(i+1)%n)
{
if(a[i]!=0)
{
d=(i+1)%n;
break;
}
}
cout<<d<<endl;
return(0);
}
这是用队列模拟的代码
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int n, m;
int ans;
int cnt;
queue <int> q;
while(cin>>n>>m)
{
while(!q.empty()) q.pop();
cnt=0;
for(int i=1; i<=n; i++)
q.push(i);
while(!q.empty())
{
ans=q.front();
q.pop();
cnt++;
if(cnt==m)
{
cnt=0;
continue;
}
q.push(ans);
}
cout<<ans<<endl;
}
return 0;
}