您的位置:首页 > 其它

鸡蛋队列

2015-12-07 21:18 211 查看

鸡蛋队列

时间限制:1000 ms | 内存限制:65535 KB难度:1描述将两根筷子平行的放在一起,就构成了一个队列。将带有编号的鸡蛋放到两根筷子之间叫做入队(push),将筷子之间的鸡蛋拿出来叫做出队(pop)。但这两种方式有特殊的定义,对于入队,只能将鸡蛋从队列的尾部向里放入;对于出队,只能将鸡蛋从队列的头部向外将鸡蛋拿出来。将①、②入队:头____________尾 _____________ ______________← ① ← ② ①← ② ①②______________ ___________________________将①、②出队:头____________尾 ______________ ______________← ① ← ② ①← ②① ②______________ ____________________________输入第一行输入一个数T,表示有T组数据第二行输入一个数N,表示有N(N<=10)种操作接下来N行,每行一种操作,push表示将编号为x的鸡蛋放入队列中,pop表示拿走队列头部的一个鸡蛋。数据输入保证合法,队列中没有鸡蛋时不会有出队操作!输出输出N种操作完之后,队列中蛋蛋的编号,如果没蛋了,就输出"no eggs!"(不包括引号)每组输出占一行。样例输入
2
3
push 1
push 2
push 3
2
push 1
pop
样例输出
1 2 3
no eggs!
设鸡蛋放入队列为x,输入一次push,x自增;从队头拿出鸡蛋为y,输入一次pop,y自增;最后若x==y,鸡蛋就取完了,否则就将y到x之间的鸡蛋编号输出来。因为是用队列进行操作,先进先出,最后还在队列中的就是y~x了。
我的代码:
#include<stdio.h>#include<string.h>int main(){int t, n, m;scanf("%d", &t);while(t--){char s[5];int a[20], x = 0, y = 0;memset(a, 0, sizeof(a));scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%s", s);if(strcmp(s, "push") == 0){scanf("%d", &m);a[x] = m;x++;}else {y++;}}if(x == y)printf("no eggs!\n");else{for(int i = y; i < x; i++){printf("%d ", a[i]);}printf("\n");}}return 0;}
http://acm.nyist.net/JudgeOnline/problem.php?pid=1117

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: