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