算法竞赛入门经典:第六章 数据结构基础 6.1卡片游戏

/*
卡片游戏:
桌上有一叠拍,从第一张牌(位于顶面的牌)开始从上往下依次编号为1~n。当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌
的最后。输入n,输出每次扔掉的牌,以及最后剩下的牌

思路:
设置剪枝数组,凡是扔掉的牌,置剪枝标记为真,循环结束条件为还剩一张牌,有两个循环:报数循环,每次报到的删除,大循环,每次超过7进入下一次循环
关键:如何解决放在末尾的问题?用循环链表,每次放在后面。凡是放在后面,再为它开辟一个数组元素
用链表,找到末尾位置之后,从前向后遍历,如果是新1,则在末尾后加上新1,一直到只剩一个元素位置,采用尾插法
首先建立单链表n
用队列也可以做,前面弹出元素,后面末尾追加元素
*/

#include <stdio.h>
#include <stdlib.h>
#include <queue>

#define MAXSIZE 1024

using namespace std;



void cardGame(int n)
{
	queue<int> queueIntCard;
	for(int i = 1 ; i <= n;i++)
	{
		queueIntCard.push(i);
	}
	while(!queueIntCard.empty())
	{
		printf("%d ",queueIntCard.front());
		queueIntCard.pop();
		if(queueIntCard.empty())
		{
			break;
		}
		queueIntCard.push(queueIntCard.front());
		queueIntCard.pop();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值