蓝桥算法训练 队列操作 扶老奶奶过街

队列操作

题目:

问题描述

  队列操作题。根据输入的操作命令,操作队列(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。

输入格式

  第一行一个数字N。
  下面N行,每行第一个数字为操作命令(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。

输出格式

  若干行每行显示一个2或3命令的输出结果。注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。

样例输入

7
1 19
1 56
2
3
2
3
2

样例输出

19
1
56
0
no

数据规模和约定

  1<=N<=50

题目分析:这道题没有绕弯就是考察对队列的使用,要注意的是,输出“no”后,输出便结束了,这里不能忽略。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
char ch[2];
int main()
{
    int n,x,y;
    queue<int>Q;
    while(scanf("%d",&n)!=EOF)
    {
       for(int i=0;i<n;i++)
       {
           scanf("%d",&x);
           if(x==1)
           {
              scanf("%d",&y);
               Q.push(y);
           }
           else if(x==2)
           {
              if(Q.size()>0)
              {
                  cout<<Q.front()<<endl;
                  Q.pop();
              }
             else
             {
                cout<<"no"<<endl;
                return 0;
             }
           }
           else
            cout<<Q.size()<<endl;
        }
    }
    return 0;
}

这道题虽然简单,无奈的是经过一个寒假的偷懒,这道题中的知识点做时都忘得差不多了,知道怎样解决就是瞧不出来,Q.size()可以直接输出栈中的元素大小都忘了,还是不能懒啊……

 

 

扶老奶奶过街

题目:

一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。

  五个红领巾各自说话:

  A :我和E都没有扶老奶奶

  B :老奶奶是被C和E其中一个扶过大街的

  C :老奶奶是被我和D其中一个扶过大街的

  D :B和C都没有扶老奶奶过街

  E :我没有扶老奶奶


  已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?

  若有多个答案,在一行中输出,编号之间用空格隔开。


  例如
  A B C D E(这显然不是正确答案)

题目分析:这道题很清楚的可以看出来只有一个结果,要么100分,要么0分

看题目信息,5人中只有两人说的是真话,且只有一个人是扶老奶奶过街的人

 

 C:\Users\18356\Desktop\图片

 

 自己做时就是按数学推导法做的,

AE为真是,得出只有B扶了
DE为真时,得出只有A扶了
BD为真时,得出只有E扶了

最后直接输出的A B E这三个字母。

但看到别人的题解看到还可以直接用模拟法来做。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
int main()
{
	int a[5],sum;
	for(int i = 0; i < 5; i++)
        {
	   sum = 0;
	   memset(a,0,sizeof(a));//先假设都没扶
	   a[i] = 1;//根据i的增加,依次模拟A到E这5个人,如果是他扶,最后是否满足只有两人的话成立
           if(!a[0]&&!a[4])//A说真话
              sum++;
           if(a[2]||a[4])//B说真话
              sum++;
          if(a[2]||a[3])//C说真话
              sum++;
          if(!a[1]&&!a[2])//D 说真话
              sum++;
          if(!a[4])//E说真话
              sum++;
          if(sum==2)//正好两个人说了真话
              printf("%c ",'A'+i);
	}
    printf("\n");
    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值