題目大意是說有n個人玩k張牌,其中牌中有k/n張GOOD牌,Bessie想的到所有的GOOD牌,但她的朋友給出了一些限制
1、發牌要從Bessie上家開始(也就是說Bessie是第n個人發牌)
2、每次發牌後将接下來的p張牌放到牌的最下面
題目要求找出GOOD牌所放的位置,要從小到大
這個題類似約瑟夫環問題,直接模拟就好。
代碼:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100001;
int n,k,p,ans[maxn];
bool vis[maxn];
int GetNext(int st)
{
int count=0,now=st;
while(1)
{
if(!vis[now])
{
count++;
if(count==p+1)
return now;
}
now++;
if(now>k)
now=1;
}
}
int main()
{
while(scanf("%d%d%d",&n,&k,&p)!=EOF)
{
memset(vis,0,sizeof(vis));
int cur=0,now=1;
for(int i=1;i<k;i++)
{
vis[now]=1;
if(i%n==0)
ans[cur++]=now;
now=GetNext(now);
}
ans[cur++]=now;
sort(ans,ans+cur);
for(int i=0;i<cur;i++)
printf("%d\n",ans[i]);
}
return 0;
}