겨울방학 합숙 훈련 작업 (3) - 창고 와 대열
6696 단어 합숙 훈련 작업ACM 문제 풀이 보고서
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
int temp[1000];
int main()
{
int top;
char s[10];
int n;
int T,i;
while(cin>>T)
{
top=0;
for(i=0;i<T; i++)
{
cin>>s;
if(!strcmp(s,"push"))
{
scanf("%d", &n);
temp[top++] = n;
}
else if(!strcmp(s,"pop"))
{
if(!top) {cout<<"error"<<endl;continue;}
else temp[--top];
}
else if(!strcmp(s,"top"))
{
if(!top) {cout<<"empty"<<endl;continue;}
else cout<<temp[top-1]<<endl;
}
}
cout<<endl;
}
return 0;
}
//No.2
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 100
int top=0;
int push(int stack[],int x)
{
if(top>maxsize)
return 0;
stack[top++]=x;
return 1;
}
int pop(int stack[])
{
return stack[--top];
}
int stackempty()
{
if ( top == 0)
return 1;
else
return 0;
}
int main()
{
int n,s[maxsize],p,q;
char m[5];
while(scanf("%d",&n)==1)
{
top=0;
while(n>0)
{
scanf("%s",m);
if(strcmp(m,"push")==0)
{
scanf("%d",&q);
push(s,q);
}
if(strcmp(m,"pop")==0)
{
if(stackempty()==0)
{
top--;
}
else
printf("error
");
}
if(strcmp(m,"top")==0)
{
if(stackempty()==0)
{
printf("%d
",s[top-1]);
}
else
printf("empty
");
}
n--;
}
printf("
");
}
return 0;
}
위의 문 제 는 스 택 의 사상 을 대충 활용 하여 배열 방식 으로 이 루어 졌 을 뿐이다.창고 꼭대기 지침 의 위 치 를 주의해 야 한다.
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2131
#include <iostream>
using namespace std;
int main()
{
int n,r,top=0;
int ans[10000];
cin>>n>>r;
for(;n!=0;top++)
{
ans[top]=n%r;
n/=r;
}
while(top)
{
cout<<ans[--top];
}
cout<<endl;
}
또한 스 택 의 사상 을 활용 하여 지침 의 위 치 를 주의해 야 합 니 다.
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2133
#include <iostream>
#include <cctype>
#include <cstdio>
using namespace std;
int calc(int a,int b,char symbol)
{
switch (symbol)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int main()
{
char formula[1000];
int mark=0;
int temp[100];
int i=0;
while(scanf("%c",&formula[i]))
{
if(formula[i]=='#') break;
i++;
}
int size=i;
for(int i=0;i<=size-1;i++)
{
if(isdigit(formula[i]))//come up with digit
{
temp[mark]=formula[i]-'0';
mark++;
}
else
{
temp[mark-2]=calc(temp[mark-2],temp[mark-1],formula[i]);
mark--;
}
}
cout<<temp[0];
}
선배 와 함께 오랫동안 고 쳤 는데 몇 가지 오류 가 발생 했 습 니 다. 1. switch 문장의 형식 이 잘못 되 었 습 니 다.2. 어디 까지 입력 하 느 냐 가 포인트 입 니 다.3. 기 호 를 만나면 기호 앞의 두 분 을 계산 한 다음 에 그들 을 창고 에 들 어가 게 한다.4. 단순 한 숫자 에 닿 으 면 창고 에 넣 기;
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char a[100];
char temp[100];
int mark=0;
while(cin>>a)
{
mark=0;
for(int i=0;i<strlen(a);i++)
{
if(a[i]=='('||a[i]=='['||a[i]=='{')//push in all left-brackets...
{
temp[mark++]=a[i];//push in stack...
}
else if(a[i]==')'||a[i]==']'||a[i]=='}')//when right-brackets appears...
{
if(a[i]==')'&&temp[mark-1]=='(')//just seek the first-left one whether matches...
{
mark--;//re-write the left-bracket's address(mark)...
}
else if(a[i]==']'&&temp[mark-1]=='[')
{
mark--;//re-write the left-bracket's address(mark)...
}
else if(a[i]=='}'&&temp[mark-1]=='{')
{
mark--;//re-write the left-bracket's address(mark)...
}
else
{
/*temp[mark]=a[i];//not mentioned so next...
mark++;//move the pointers...*/
}
}
}
if (!mark) cout<<"yes"<<endl;//empty stack means it matches perfectly...
else cout<<"no"<<endl;
}
return 0;
}
You have to initialize "mark"!
사상 은 왼쪽 괄호 를 만 나 왼쪽 괄호 를 창고 에 넣 고 오른쪽 괄호 를 만 나 서 오른쪽 괄호 를 창고 에서 검색 하 게 하고 있 으 면 창고 에서 나 오 게 하고 없 으 면 다음 을 진행 하 게 하 는 것 이다.
//No.2
#include<stdio.h>
#include<string.h>
int main()
{
char s[1000];
while(gets(s))
{
int i,j,top=0;
char a[1000];
int p=strlen(s);
for(i=0;i<p;i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
{
a[top]=s[i];
top++;
}
else if(s[i]==')'||s[i]==']'||s[i]=='}')
{
if(a[top-1]=='('&&s[i]==')')
{
a[top-1]='\0';
top--;
}
else if(a[top-1]=='['&&s[i]==']')
{
a[top-1]='\0';
top--;
}
else if(a[top-1]=='{'&&s[i]=='}')
{
a[top-1]='\0';
top--;
}
else
{
a[top]=s[i];
top++;
}
}
}
if(top==0)
{
printf("yes
");
}
else
{
printf("no
");
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
poj1936텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.