C++ 取牌游戏
📋 个人简介
🎉大家好,我是3月份新人榜排名第三的 ༺Blog༒Hacker༻
💬支持我:点赞👍+收藏⭐️+留言📝
🌺格言:༺永做优质༒programmer༻
📣取牌游戏
【问题描述】
🍋小明正在使用一堆共 K 张纸牌与 N-1 个朋友玩取牌游戏。其中,N≤K≤100000,2≤N≤100N≤K≤100000,2≤N≤100,K 是 N 的倍数。纸牌中包含M=K/NM=K/N张“good”牌和K−MK−M 张“bad”牌。小明负责发牌,他当然想自己获得所有“good”牌。
🍋他的朋友怀疑他会欺骗,所以他们给出以下一些限制,以防小明耍诈:
🍊游戏开始时,将最上面的牌发给小明右手边的人。
🍊每发完一张牌,他必须将接下来的 P 张牌(1≤P≤101≤P≤10)一张一张地依次移到最后,放在牌堆的底部。
🍊以逆时针方向,连续给每位玩家发牌。
小明迫切想赢,请你帮助他算出所有“good”牌放置的位置,以便他得到所有“good”牌。牌从上往下依次标注为 #1,#2,#3,…
【输入格式】
🍋第 1 行,3 个用一个空格间隔的正整数 N、K 和 P。
【输出格式】
🍋M 行,从顶部按升序依次输出“good”牌的位置。
【输入样例】3 9 2【输出样例】378
💯CODE
#include//#include//#include//#includeusing namespace std;queue<int>q;int a[100005],tot=0;int main(){int n,k,p;cin>>n>>k>>p;int m,i,j;m=k/n;for(i=1;i<=k;i++) q.push(i);//push 进队int x,y;y=1;while(!q.empty() /*q.size()*/)//队不空 0是false 非0是true { x=q.front() ;//取队首q.pop();//出队 y--; if(y==0) y=n; if(y==1) a[++tot]=x;//good for(j=1;j<=p;j++){ x=q.front() ;//取队首q.pop();//出队q.push(x);//进队} }sort(a+1,a+tot+1);for(i=1;i<=tot;i++){ cout<<a[i]<<endl;}return 0;}