1432 要上课啦!书呢?(数据结构入门题)

来源:互联网 发布:端口转换 编辑:程序博客网 时间:2024/05/16 06:10
 描述

昨天晚上dd终于下定决心把自己的桌子整理一下,他有一个可以装10本书的大箱子,于是他把认为不用的书都放进去了,当然是按顺序放的,如果要取出来得倒着取,即先取出最后放的书,然后取倒数第二本...最后取出第一本放进去的书。

结果第二天……dd突然发现有一本书他是要用的,结果放到了箱子里面,还有5分钟就上课了,取出一本书要10秒钟时间,现在他想知道自己能不能在1分钟内取出自己想要的书。

还有个更郁闷的事情是,dd只记得他整个放书的过程,记不得这本书究竟放哪里了……

现在给你个放书的过程和dd需要的书名,问在60秒内能否取出书。

书名都是一个字符串,不超过20个字符,记住,大箱子只能放10本书,如果在放书过程中出现超过10本书或者出现取出书操作的时候箱子里面没有书,或者出现放书操作的时候放置的书已经在箱子里面了,那么这条命令就无效,跳过(肯定是dd记错了呗)。

输入

多组数据,对于每组数据:

输入第一行包含一个整数n,表示有n个操作,不超过1000个操作

输入第二行包含一个整数m,表示dd有m本书

以下m行分别是每个书的书名;

以下n行分别表示n个操作,每个操作格式为如下2种之一:

放书操作:in 书名

取书操作:out

最后一行包含一个字符串,表示dd想要的书的书名(可能本来就没有在箱子里面)

输出

对于每组数据输出是否可以在规定时间内拿到自己想要的书(最多取6次)

如果可以输出yes否则输出no

解题思路:此题是模拟栈的操作,箱子是栈,书是元素。注意判断溢出条件即箱子的最大容量,然后统计一下时间即可。

 

#include <stdio.h>#include <string.h>main(){int number,te;int shu,op;char a[10][21];char zancun[21];char temp[1001][30];char  c[21];int   i,j,k,t;int   up;int flag;int count;scanf("%d",&number);for(te=1;te<=number;te++){scanf("%d",&op);scanf("%d",&shu);getchar();for(i=0;i<shu;i++){scanf("%s",&temp[i]);}   getchar();for(i=0;i<op;i++){gets(temp[i]);}k=0;flag=0;for(i=1;i<=op;i++){   if(temp[i][0]=='i'){   if(k<10){up=0;for(j=3;temp[i][j]!='\0';j++)zancun[up++]=temp[i][j];zancun[up]='\0';for(t=0;t<k;t++){if(strcmp(zancun,a[t])!=0)                       continue;else break;}if(t==k){strcpy(a[k],zancun);k++;}}elsecontinue;}if(temp[i][0]=='o'){if(k>0)k--;elsek=0;}}getchar();scanf("%s",&c);for(i=0;i<k;i++){if(strcmp(a[i],c)!=0)continue;else{count=i;break;}}if(k-count<6||i==k)printf("yes\n");if(k-count>6&&i!=k)printf("no\n");}}


 

原创粉丝点击