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;
}
|
||