HDU 2319 Card Trick (模拟)
Problem Description
The magician shuffles a small pack of cards, holds it face down and performs the following procedure:
1.The top card is moved to the bottom of the pack. The new top card is dealt face up onto the table. It is the Ace of Spades.
2.Two cards are moved one at a time from the top to the bottom. The next card is dealt face up onto the table. It is the Two of Spades.
3.Three cards are moved one at a time…
4.This goes on until the nth and last card turns out to be the n of Spades.
This impressive trick works if the magician knows how to arrange the cards beforehand (and knows how to give a false shuffle). Your program has to determine the initial order of the cards for a given number of cards, 1 ≤ n ≤ 13.
Input
On the first line of the input is a single positive integer, telling the number of test cases to follow. Each case consists of one line containing the integer n.
Output
For each test case, output a line with the correct permutation of the values 1 to n, space separated. The first number showing the top card of the pack, etc…
Sample Input`2
4
5`
Sample Output`
2 1 4 3
3 1 4 5 2`
题意:
你的手中有1~n这n张扑克牌,但是这些牌的顺序是不确定的,你需要在这些牌上进行一些操作
1.第一次你从最上面拿出一张牌放到最下面,然后把当前的第一张牌上面的数字记下来并把这张牌拿出 去
2.第二次你要先从最上面取出一张牌放到最下面,再从最上面取出一张牌放到最下面,然后把当前的第一张牌上面的数字记下来并把这张牌拿出去
3.依次进行n次,不同之处在于第i次取最上面牌再放到最下面的操作要进行i次
最后要求你一次记下的这些牌的序列为1到n,让求手中牌的原始序列。
方法一
一种完全逆序的思维,可能比较难以理解一些:
#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int v[1000];
queue<int>q;
int m,i;
scanf("%d",&m);
for(i=1; i<=m; i++)
q.push(i);//将这些数字按照正确的顺序存储到队列中
int op;
int m1=1;
while(!q.empty())
{
for(i=1; i<=m1; i++)//依次进行相应的取放操作
{
op=q.front();
q.pop();
q.push(op);
}
int b=q.front();
q.pop();
v[b]=m1;/*让次数当作数组的值,取出来的数字当下标,
因为这样是一种与题意要求相反的顺序,
所以输出的时候下标当取出顺序,数组值当取出的数字,
就正好是与提上要求的正序
*/
m1++;
}
printf("%d",v[1]);
for(i=2;i<=m;i++)
printf(" %d",v[i]);//所有的都是反的!!!!!!
printf("\n");
}
return 0;
}
方法二:
完全逆序模拟题上的操作步骤,最后队列的逆序即为所求:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int n,a,t,b[15];
queue<int> Q;
cin>>n;
while(n--)
{
cin>>a;
//逆序将每一张牌放入进去,然后进行相应的操作
Q.push(a);//第一次也要进行n次循环,但是只有一个数,没有循环的必要
for(int i=1; i<a; i++)
{
Q.push(a-i) //放入一张新的牌;
for(int j=a-i; j>=1; j--) //进出a-i次
{
t=Q.front();
Q.pop();
Q.push(t);
}
}
int q=0;
while(!Q.empty()) //因为要逆序将队列中的值输出来,先把队列打印出来
{
b[q++]=Q.front();
Q.pop();
}
for(int i=q-1; i>0; i--)//逆序输出
cout<<b[i]<<" ";
cout<<b[0]<<endl;
}
return 0;
}
HDU 2319 Card Trick (模拟)的更多相关文章
- 【HDOJ】2319 Card Trick
水题,STL双端队列. /* 2319 */ #include <iostream> #include <cstdio> #include <cstring> #i ...
- UESTC 890 Card Trick(DP 纸牌魔术)
题意 给你一些牌 所有正面朝下放桌子上 你选一个起点 翻开那张牌 牌上的数字是几就向前走几步 J,Q,K 都是向前走10步 A向前走11步 知道向前走相应的步数后超过了终点 ...
- ny714 Card Trick
Card Trick 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 The magician shuffles a small pack of cards, holds ...
- SPOJ 1108 Card Trick 暴力模拟
解释一下样例,因为我觉得这个题意表述的不是很清楚.以第二组样例为例. 牌序为:3 1 4 5 2 第一轮:把 3 放到末尾:1 4 5 2 3,最顶上的牌是1,把1拿走.剩余 4 5 2 3 第二轮: ...
- POJ 2200 A Card Trick(模拟)
题目链接 题意 : 一共52张牌(A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K)花色分别是C,D,H,S ...给助理5张牌,然后助理需要重新排一下次序,把第一张牌给观 ...
- HDU 5510---Bazinga(指针模拟)
题目链接 http://acm.hdu.edu.cn/search.php?action=listproblem Problem Description Ladies and gentlemen, p ...
- HDU 3328 Flipper 栈 模拟
首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边的牌堆,L表示翻一下左边的牌堆,直到最后摞成 ...
- HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...
- HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))
扫雷 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
随机推荐
- 蜗牛慢慢爬 LeetCode 3. Longest Substring Without Repeating Characters [Difficulty: Medium]
题目 Given a string, find the length of the longest substring without repeating characters. Examples: ...
- 软工网络15团队作业4-DAY8
每日例会 昨天的工作. 张陈东芳:可导入部分类信息,继续尝试将所有信息导入: 吴敏烽:商品类的规范化编写: 周汉麟:界面的排版继续优化: 林振斌:按照浏览历史,次数等,继续优化商品类排序: 李智:研究 ...
- BZOJ 1835 基站选址(DP+线段树)
# include <cstdio> # include <cstring> # include <cstdlib> # include <iostream& ...
- BZOJ 1189 紧急疏散(二分+最大流)
求出所有人撤离的最短时间.由于每扇门只能通过一次,所以不能简单用bfs来搞. 显然答案是有单调性的,考虑二分,问题变成了判断时间x所有人能不能撤离. 考虑最大流.对于每扇门,每个时间通过的人数最多为1 ...
- Codeforces 748D Santa Claus and a Palindrome
雅礼集训期间我好像考完试就开始划水了啊 给出k个长度相同的字符串,每个串有一个权值,选出一些串连成一个回文串.使得选中的串的总权值最大. 如果选一个串,必须同时选一个对称的串.还有一个特殊情况是可以在 ...
- 洛谷 P1972 [SDOI2009]HH的项链
不是裸题,鉴定完毕. 我是题面 对于这道题,我是离线做的... 树状数组吧,好些点 我们可以很轻易地得到一个很显然的结论,就是关于同一个数,我们只需要记录它不超过当前区间的最后一次出现的位置即可.举例 ...
- grub引导启动 win10 Ubantu 凤凰OS 三系统
在Ubantu OS下,用文件管理器打开系统磁盘下的 boot文件夹,然后用管理员身份打开grub文件夹,然后打开grub.cfg(用记事本打开) 4. 在grub.cfg文件里面找到下一段内容(比较 ...
- Eve-NG-Toolkit
Eve-NG-Toolkit 来源 http://www.emulatedlab.com/archives/694 参考 http://eve-ng.cn/doku.php http://foru ...
- Intel WIDI (Wireless Display) 相关技术知识分析
一. WIFI 1.如何查找WIFI设备 非p2p设备 Beacons 包(同步,SSID) 速率 1M/s 2.4G HZ 13个信道,1,6,11三个信道不重叠 2.P2P 认证 客户端在每个通道 ...
- 【刷题】BZOJ 5248 [2018多省省队联测]一双木棋
Description 菲菲和牛牛在一块n行m列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手.棋局开始时,棋盘上没有任何棋子, 两人轮流在格子上落子,直到填满棋盘时结束.落子的规则是:一个格子可以落子 ...