直接上题
一、出栈序列合法性判断
AC代码:
思路:STL库的栈
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
int main(){
int n,x,flag,a[105],cnt;
stack<int> st;
while(scanf("%d",&n)){
flag=0;
if(n==0){
break;
}
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(st.size()>0){
st.pop();
}
cnt=1;
for(int i=1;i<=n;i++){
while(cnt<=a[i]){
st.push(cnt);
cnt++;
}
if(!st.empty()&&st.top()==a[i]){
st.pop();
}
else{
flag=1;
cout<<"No"<<endl;
break;
}
}
if(flag==0){
cout<<"Yes"<<endl;
}
}
return 0;
}
二、士兵报数
AC代码:
思路:STL库的队列
#include<iostream>
#include<queue>
using namespace std;
int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
queue<int> q;
for(int i=1;i<=n;i++){
q.push(i);
}
if(n<=3){
for(int i=1;i<=n;i++){
cout<<i<<" ";
}
cout<<endl;
continue;
}
int len=q.size();
while(len>3){
if(len<=3) break;
for(int i=1;i<=len;i++){
int x=q.front();
q.pop();
if(i%2!= 0) q.push(x);
}
len=q.size();
if(len<=3) break;
for(int i=1;i<=len;i++){
int x=q.front();
q.pop();
if(i%3!= 0) q.push(x);
}
len=q.size();
}
while(!q.empty()){
cout<<q.front()<<" ";
q.pop();
}
cout<<endl;
}
return 0;
}
三、愚人节礼物
AC代码:
思路:纯模拟
#include<stack>
#include<iostream>
using namespace std;
int main(){
string s;
int cnt1,cnt2;
while(cin>>s){
int len=s.size();
cnt1=0,cnt2=0;
for(int i=0;i<len;i++){
if(s[i]=='B'){
break;
}
else if(s[i]=='('){
cnt1++;
}
else{
cnt2++;
}
}
cout<<cnt1-cnt2<<endl;
}
return 0;
}