xtu 1035 与xtu 1036 两道出栈入栈题目,蛮有趣的

Description

John是个小列车站的站长,每次列车在这里重新编组时他就很烦恼。因为站上只有一个人字形的编组轨道(如图),所有的列车车厢都是从人字轨的右边依次进去,从左边出来。但有一些编组顺序John总编不出来,John怀疑有些编组顺序是不可能完成的,可John又找不出那些是顺序是可以编组出,那些不可以。请你写一个程序帮助John辨别哪些编组可以完成,哪些不能完成。


输入:

第一行是一个整数K,表示有多少个测试用例,以后每行一个测试用例,每行为n+1个整数,第一个整数为n
表示有多少节车厢,后面n个整数表示需要编组成的顺序。比如说3节车厢,按照1,2,3依次入轨编组,可以在左边形成1 2 3,1 3 2,2 1
3,2 3 1,321。

输出:

每行输出一个测试用例的结果。如果可以编组输出Yes,否则输出No。

 

Sample Input

2
3 3 1 2
4 1 2 3 4 
 

Sample Output

No
Yes
代码#include<iostream>
using namespace std ;
int main(){
    int k,n,stack[205],arr[205],mem,num,top;
    cin >> k;
    while(k--){
        cin >>n;
        for(int i=0;i<n;i++){
            cin >> arr[i];
        }
        mem = 1;
        top = 0;
        num = 0;
        stack[0] = -1;
        while(mem < n+1){//进行入栈操作,从一开始入栈 
            stack[++top] = mem++;//进行入栈操作
            while(stack[top] == arr[num]) {//判断栈顶元素与当期数组元素是否相等,相等则出栈 
                top--;//出栈后数组减一,即出栈,而num++即枚举完可以判断是否全部出栈,若可以那么输出YES
                num++;
            }
        }
        if(top == 0)cout << "Yes" <<endl;
        else cout << "No" <<endl;
    }
    return 0;
}
//https://blog.csdn.net/sinat_27233737/article/details/78004590

考古人员发现地球在一亿年以前曾经存在一个高级文明叫做Delta,而且发现这个文明的具有文字和语言。经过艰苦卓绝的工作,专家们破译了其中的一些文字和表示方法。他们使用+表示加运算,-表示减运算,*表示乘运算,/表示整数除运算,%表示取模运算,但算术式的表示和我们不同,他们把要计算的数放到前面,运算符放在计算对象的后面,比如 1 2 + 表示 1+2, 1 12 + 3 4 + * 表示(1+12)*(3+4)。考古人员希望你帮助他们编写一个程序,计算出这些计算式的值。

输入:

第一行是一个整数K,表示有多少个测试用例,以后每行一个测试用例。每行为一个字符串(长度不超过200个字符),数和数,数和运算符,运算符和运算符之间分别用一个空格隔开,数都为非负整数,且小于或等于231-1。(所有计算式都符合计算规则,不会出现不可计算的计算式,且结果都为非负整数,
且小于或等于231-1)

输出:

每行输出一个测试用例的结果。使用一个字符串表示计算以后的结果。

 

Sample Input

2
1 2 +
1 12 + 3 4 + *
 

Sample Output

3
91
 

Source

程序设计实践

代码:

#include <stdio.h>
char ch[222];
int kyx(char ch[])
{
    int t,sum;
    t=1;
    sum=ch[0]-‘0‘;//化为整数 
    while(ch[t]!=‘\0‘)//空字符 
    {
        sum=sum*10+(ch[t++]-‘0‘);//由于有些连起来的字符如12,则需用此来变为整数 
    }
    return sum;
}
int main()
{
    int str[1111];
    int s,i,n;
    s=0;
    i=0;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",ch);
        s=kyx(ch);
        str[++i]=s;
        while(getchar()!=‘\n‘)//一个一个的读,读到换行为止。 
        {
            scanf("%s",ch);//输入方法值得注意,学一学,这种可以输入就可以用 
            if(ch[0]==‘+‘)
            {
                str[i-1]=str[i-1]+str[i];
                i--;    
            }else if(ch[0]==‘-‘)
            {
                str[i-1]=str[i-1]-str[i];
                i--;
            }else if(ch[0]==‘*‘)
            {
                str[i-1]=str[i-1]*str[i];
                i--;
            }else if(ch[0]==‘%‘)
            {
                str[i-1]=str[i-1]%str[i];
                i--;
            }else if(ch[0]==‘/‘)
            {
                str[i-1]=str[i-1]/str[i];
                i--;    
            }else
            {
                s=kyx(ch);
                str[++i]=s;//每个不是符号的都会去进行kyx函数化为整数运算 
            }
        }
        printf("%d\n",str[i]);
        
    }
    return 0;
}
 
 

原文地址:https://www.cnblogs.com/kyx599/p/11978276.html

时间: 2024-08-04 16:55:35

xtu 1035 与xtu 1036 两道出栈入栈题目,蛮有趣的的相关文章

出栈入栈动画demo

项目做了一个切换界面动画的功能,用到了出栈入栈的,写了一个demo package com.myron.stackview; import java.util.Stack; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation;

C++中栈的出栈,入栈规则:A,B,C,D,E

考题: 栈底至栈顶一次存放元素 ABCD 在第五个元素E入栈之前  栈中元素可以出栈,则出栈序列可能是_____a d___________. a.  ABCED b.  DBCEA   c.  CDABE   d.  DCBEA 分析: 1.假定进栈序列是从小到大排练的(即A<B<C<D<E),则出栈序列中不可能有  “大小中”这种序列,因为在“大数”出栈后,在栈中“中数”是在“小数”上面的,所以只能是先出“中数”再出“小数”2.出栈序列中如包含下列序列则是错误的:CAB,DAB

两道很好的dp题目【4.29考试】

A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现在给出一个长度为n-1的排列表示,问有多少种1到n的排列满足这种表示. 输入: 一个字符串S,S由I,D,?组成.?表示这个位置既可以为I,又可以为D. 输出: 有多少种排列满足上述字符串.输出排列数模1000000007 样例输入: ?D 样例输出: 3 数据范围: 20%的数据 S长度<=10

两道关于逆序对的题目

题目一:合并有序数组:给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B.编写一个方法,将B合并入A并排序. 思路:注意这儿已经说明A的空间足够,那就说明不能再开辟辅助空间.然后合并的话可以采用归并的思想,就能解决这个问题. 代码: import java.util.Arrays; public class 合并有序数组 { public static void main(String[] args) { int A[] = new int[12]; for (int i = 0;

职责链 评价:挺好玩的 稍微复杂版 类似出栈入栈 (原理职责链调用一个之后跳转到第二个执行在跳转第三个执行 接下来因为每次调用完后都会返回被调用的位置)

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication20{    public class Response    {        public string ResponseStr { get; set; }                     } public class Request    {        pub

使用两个队列实现一个栈

首先,我们得了解队列和栈的基本原理. 队列是一个"先进先出"的一个结构.队列的定义是在队尾插入,在队头删除,这就要求要用一种在尾部插入容易的,在头部删除容易的结构,你一定会想到单链表,对,库的实现就是用一个链表实现的. 栈,相信大家都不会陌生,函数栈帧等的实现,它是一种"先进后出"的结构.栈的插入删除都是在尾部进行的. 所以要用队列实现一个栈,要解决的问题就是在删除时要删除最后插入的那个元素.   我们先来模拟一下出栈和入栈的情况: (1)入栈:Q1:1,2,3,4

C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋值*/ #include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define OK 1#define ERROR 0#define NAMESIZE 255//字符串的最大长度

分享两道笔试题目

前几天,给成都的某家公司投了个简历,给发了两道笔试题目,与大家分享一下.附上自己的解题过程,写得不好的地方,还请博友多多指教. 一 .  设计程序输出销售及收费清单 一个电商平台对在其平台之上销售的除了书籍.食品以及药物以外的商品收取 10% 的费用.而对于进口的商品则额外收取 5% 的附加费用.对于平台抽取的费用计算时,舍入的规则是:对于 n% 抽取率,价格为 p的商品, np/100 的值就近舍入到 0.05(如: 7.125 -> 7.15, 6.66 -> 6.70 ). 卖家卖出一些

两道笔试题的感触

今天做了两道笔试题,收益良多.有些题,你会发现,虽然并不难,但是却很容易没有思路或者出错,这都是源自平时的不求甚解.很多知识点,自以为已经掌握,其实只是管中窥豹,可见一斑.不要一味墨守成规,也要用于思考,很多东西既要知其然,也要知其所以然.我一直觉得了解和精通中间差着十万八千里,看来还有很长一段路要走.只有比别人更早.更勤奋地努力,才能尝到更加成功的滋味.哈哈,跑题了. 下面看一下两道笔试题.一.大概简单地说一下,求下面这段代码的结果. new Thread(new Runnable() { p