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;
}
 
 
posted @ 2019-12-03 17:33  adsry  阅读(618)  评论(0编辑  收藏  举报