UVa 10935 - Throwing cards away I (队列问题)
原题
Throwing cards away I
Given is an ordered deck of
n cards numbered 1 to n with card 1 at the top and card n at the bottom. The
following operation is performed as long as there are at least two cards in the
deck:
Throw away the top card and move the
card that is now on the top of the deck to the bottom of the deck.
Your task is to find the sequence of discarded cards and the last, remaining
card.
Input Each line of input (except the last) contains a number n ≤ 50. The last
line contains ‘0’ and this line should not be processed.
Output For each number from the input produce two lines of output. The first
line presents the sequence of discarded cards, the second line reports the last
remaining card. No line will have leading or trailing spaces. See the sample
for the expected format.
Sample Input
7 19 10 6 0
Sample Output
Discarded cards: 1, 3, 5, 7, 4, 2
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 4, 8, 12, 16, 2,
10, 18, 14
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 2, 6, 10, 8
Remaining card: 4
Discarded cards: 1, 3, 5, 2, 6
Remaining card: 4
题目描述:桌上有n(n<=50)张牌,从第一张开始,从上往下依次编号为1-n。当至少还剩下两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张牌放到整叠牌的最后。输入每行包含一个n,输出每次扔掉的牌以及最后剩下的牌。
此题可以用队列的方式解题,队列是一种特殊的线性结构,只允许在队列的首部(head)进行删除,成为“出队”,而在队列的首部(tail)进行插入,称为“入队”。
队列解题思路如下:
第一步,要将第一个数删除,先想一下怎么将数组的第一个数删除呢,最简单的方法就是将所有的数都往后挪一位,将前面的数覆盖。但是如果每次都挪一次,很耗费时间。在此题中,我们引入整型变量head和tail,head用来记录队列的第一位,tail记录最后一位的下一个位置(这里tail记录最后一位的下一个位置是因为当队列只剩下一个元素时,第一位会和最后一位重合)。每当删除一个数,head++,浪费一个空间,但可以节省很多时间,新增加一个数也是,把需要增加的数放到队尾即a【tail】之后再tail++就可以了。
注意:输出格式,当n=1时,“Discarded cards:”后没有空格。
下面是代码(已运行通过)
#include<iostream>
using namespace std;
int s[]; //队列的主体,用来储存内容
int n;
int main()
{
while(cin>>n&&n)
{
int head=;
int tail=n; //head为队首,tail为队尾即n
for(int i=;i<=n;i++)
{
s[i]=i;
}
if(n==)
{
cout<<"Discarded cards:"<<endl<<"Remaining card: 1"<<endl;
}
else
{
cout<<"Discarded cards: ";
while(head<tail)
{
cout<<s[head];head++;
if(head<tail)
cout<<", ";
if(head==tail)
cout<<endl<<"Remaining card: "<<s[head]<<endl;
s[++tail]=s[head];
head++;
}
}
}
return ;
}
UVa 10935 - Throwing cards away I (队列问题)的更多相关文章
- UVa 10935 Throwing cards away I【队列】
题意:给出 n张牌,从上往下编号依次为1到n,当牌的数目至少还剩下2张时,把第一张牌扔掉,然后把新的一张牌放在牌堆的最底部,问最后剩下的那一张牌是哪一张牌. 模拟队列的操作------- #inclu ...
- Uva 10935 Throwing cards away I
题目意思:有N张牌,标号为1~N,且牌以叠好,从上到小就是标号1-N的牌,只要牌堆数量大于等于2的时候,就采取如下操作:将最上面的牌扔掉(即离开牌堆).刚才那张牌离开后,再将新的最上面的牌放置于牌堆最 ...
- uva 10935 throwing cards away <queue>
Given is an ordered deck of n cards numbered 1 to n with card 1 at the top and card n ...
- 【UVA】10935 Throwing cards away I(STL队列)
题目 题目 分析 练习STL 代码 #include <bits/stdc++.h> using namespace std; int main() { int n; wh ...
- UVA 10940 Throwing cards away II
题意略: 先暴力打表发现规律 N=1 ans=1N=2 ans=2N=3 ans=2N=4 ans=4N=5 ans=2N=6 ans=4N=7 ans=6N=8 ans=8N=9 ans=2N=10 ...
- Throwing cards away I
Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top a ...
- [刷题]算法竞赛入门经典(第2版) 5-3/UVa10935 - Throwing cards away I
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa10935 - Throwing cards away I #incl ...
- Throwing cards away I uva1594
Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the t ...
- 紫书第五章训练3 D - Throwing cards away I
D - Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top ...
随机推荐
- Assumptions
理想情况下,写测试用例的开发人员可以明确的知道所有导致他们所写的测试用例不通过的地方,但是有的时候,这 些导致测试用例不通过的地方并不是很容易的被发现,可能隐藏的很深,从而导致开发人员在写测试用例时很 ...
- python-selenium实现的简易下载器,并常见错误解决
简易下载器的实现 支持代理.失败重试.确保包含指定ID元素(可根据需求自定义修改) # coding: utf-8 from Utils import logging from bs4 import ...
- Fiddler 抓包 教程
Fiddler的基本介绍 Fiddler的官方网站: www.fiddler2.com Fiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料. Fiddler是最 ...
- Struts2接收参数的几种方式
一.用Action属性 在action里定义要接收的参数,并提供相应的set和get方法. 如: public class LoginAction extends ActionSupport { pr ...
- Web日程管理FullCalendar
fullcalendar是一款jQuery日程管理控件,提供了丰富的属性设置和方法调用,官网下载地址http://fullcalendar.io/download,眼下最新版本号是2.3.2. 仅仅要 ...
- 用htaccess进行访问控制(转)
1. 文件访问控制 利用 httpd.conf 中的 Order.Files 及 FilesMatch 命令实现的访问控制可以满足大部分要求,但是当用户被拒绝时,他们看到的是硕大的“403 Forbi ...
- Qt 学习之路 :事件
事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事 ...
- [转] __thread关键字
http://blog.csdn.net/liuxuejiang158blog/article/details/14100897 __thread是GCC内置的线程局部存储设施,存取效率可以和全局变量 ...
- [转] shared_from_this 几个值得注意的地方
http://hi.baidu.com/cpuramdisk/item/7c2f8d77385e0f29d7a89cf0 shared_from_this()是enable_shared_from_t ...
- POJ 2007 Scrambled Polygon 凸包
Scrambled Polygon Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7214 Accepted: 3445 ...