P1597 语句解析(两种解法)
题目背景
木有背景……
题目描述
一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 3 个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];
。未赋值的变量值为 0输出 a、b、c 的值。
输入格式
一串(<255)PASCAL语言,只有a,b,c 3个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为0。
输出格式
输出a,b,c 最终的值。
输入输出样例
输入 #1复制
a:=3;b:=4;c:=5;
输出 #1复制
3 4 5
解法一:
using namespace std;
int main(){
int a=0,b=0,c=0;
char s[256];
cin>>s;
int len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='a'){
if(s[i+3]=='a') a=a;
else if(s[i+3]=='b') a=b;
else if(s[i+3]=='c') a=c;
else a=s[i+3]-'0';
}
if(s[i]=='b'){
if(s[i+3]=='a') b=a;
else if(s[i+3]=='b') b=b;
else if(s[i+3]=='c') b=c;
else b=s[i+3]-'0';
}
if(s[i]=='c'){
if(s[i+3]=='a') c=a;
else if(s[i+3]=='b') c=b;
else if(s[i+3]=='c') c=c;
else c=s[i+3]-'0';
}
}
cout<<a<<" "<<b<<" "<<c;
return 0;
}
解法二:
#include<cstdio>
using namespace std;
int a[3];char s1,s2;
int main()
{
while (scanf("%c:=%c;",&s1,&s2)==2)//充分利用c++语言优势
a[s1-'a']=s2>='0' && s2<='9' ? s2-'0' : a[s2-'a']; //赋值语句简洁明了
printf("%d %d %d",a[0],a[1],a[2]);
}