卡牌游戏(queue的基础应用)

卡牌游戏(queue的基础应用)
桌上有一叠卡牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n;当至少还剩两张牌时进行一下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。

输入:n;

输出:每次扔掉的牌以及最后剩下的牌

样例输入:7

样例输出:1 3 5 7 4 2 6

题解:模拟队列的进出。。。


代码:
#include<cstdio>
#include<iostream>
using namespace std;
int queue[150]; 
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)queue[i]=i+1; //初始化 
	int front=0;//队首元素位置 
	int rear=n;  //队尾元素位置 
	while(front<rear)
	{
		cout<<queue[front++]<<" ";  //输出并抛弃队首元素 
		queue[rear++]=queue[front++];  //将队首元素移到队尾 
	} 
	return 0;
}
下面的这个语句可能会造成非法访问。
queue[rear++]=queue[front++];

优化为以下代码:
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
queue<int>q;
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)q.push(i+1);
	while(!q.empty()){
		cout<<q.front()<<" ";
		q.pop();
		q.push(q.front());
		q.pop();
	} 
	return 0;
}



  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 如果您要使用队列(Queue)来实现卡牌匹配,可以考虑以下步骤: 1. 创建一个队列用于存储卡牌。 2. 从卡牌堆中将卡牌随机地放入队列中。 3. 每次从队列中取出两张卡牌进行匹配。 4. 如果匹配成功,则将这两张卡牌从队列中删除。 5. 如果匹配失败,则将这两张卡牌放回队列尾部。 6. 重复执行步骤3~5,直到队列中没有卡牌了,或者卡牌匹配成功。 下面是一个 Python 代码示例: ```python from queue import Queue import random # 卡牌堆 cards = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] # 创建一个队列 card_queue = Queue() # 将卡牌随机放入队列中 random.shuffle(cards) for card in cards: card_queue.put(card) # 匹配卡牌 while card_queue.qsize() > 1: # 取出两张卡牌 card1 = card_queue.get() card2 = card_queue.get() if card1 == card2: # 匹配成功,不需要放回队列 print(f'{card1} 和 {card2} 匹配成功') else: # 匹配失败,将卡牌放回队列尾部 card_queue.put(card1) card_queue.put(card2) # 队列中只剩下一张卡牌,无法匹配 if card_queue.qsize() == 1: print(f'剩下一张卡牌 {card_queue.get()},无法匹配') ``` 这段代码使用了 Python 自带的 `queue.Queue` 类来实现队列功能。在创建队列后,我们使用 `random.shuffle` 函数将卡牌随机地放入队列中。然后,我们使用 `queue.Queue.get` 函数从队列中取出卡牌,并使用 `queue.Queue.put` 函数将卡牌放回队列中。最后,我们使用 `queue.Queue.qsize` 函数获取队列中的卡牌数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值