0
点赞
收藏
分享

微信扫一扫

C++ 取牌游戏

程序员漫画编程 2022-05-03 阅读 230
c++算法

📋 个人简介

📣取牌游戏

【问题描述】
🍋小明正在使用一堆共 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
【输出样例】
3
7
8

💯CODE

#include<bits/stdc++.h>
//#include<iostream>
//#include<queue>
//#include<algorithm>
using 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;
}

🔮朋友们,点赞是我更新的动力,明天再见,拜拜!!!

举报

相关推荐

2021.04.01取扑克牌

C++ 游戏开发

鬼屋游戏c++

c++骰子游戏

C++——扫雷游戏

C++小游戏

C/C++人机猜拳游戏

c++向上取整和向下取整

0 条评论