题目背景
木有背景……
题目描述
一串长度不超过 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
第一次题解:(洛谷编译时间超时,但是我的编译器正常使用,于是感觉不能嵌套太多判断语句,否则洛谷不能给过)
#include <iostream>
using namespace std;
int main(){
char s;char a,b,c;
while((s=getchar())!='\n'){
if(s=='a'){
cin >> s;
if(s==':'){
cin >> s;
if(s=='='){
cin >> a;
if(a== ';')a='0';
if(!isdigit(a)){
if(a=='b')a=b;
if(a=='c')a=c;
}
//cout << a << endl;
}
}
}
if(s=='b'){
cin >> s;
if(s==':'){
cin >> s;
if(s=='='){
cin >> b;
if(b== ';')b='0';
if(!isdigit(b)){
if(b=='a')b=a;
if(b=='c')b=c;
}
//cout << b << endl;
}
}
}
if(s=='c'){
cin >> s;
if(s==':'){
cin >> s;
if(s=='='){
cin >> c;
if(c==';')c='0';
if(!isdigit(c)){
if(c=='b')c=b;
if(c=='a')c=a;
}
//cout << c << endl;
}
}
}
}
cout << a-'0' << " " << b-'0' << " " << c-'0';
return 0;
}
第二次题解:(简洁明了了很多,但是还是判断语句很多,时长超时,比第一次题解通过的还少。但是看题解这个方法在几年前是给过的)
#include <iostream>
using namespace std;
int main()
{
char f,d,e,g,z;
int a=0,b=0,c=0;
while((f=getchar()) != '\n'){
cin>>g>>d>>z>>e;
if(z>='0'&&z<='9'){
z=z-'0';
if(f=='a')a=z;
if(f=='b')b=z;
if(f=='c')c=z;
}else if(z=='a'){
if(f=='a')a=a;
if(f=='b')b=a;
if(f=='c')c=a;
}else if(z=='b'){
if(f=='a')a=b;
if(f=='b')b=b;
if(f=='c')c=b;
}else if(z=='c'){
if(f=='a')a=c;
if(f=='b')b=b;
if(f=='c')c=c;
}
}
cout<<a<<" "<<b<<" "<<c;
return 0;
}
第三次AC题解:
#include<iostream>
using namespace std;
int main(){
int a[3];
char s1,s2;
while(scanf("%c:=%c;",&s1,&s2)==2){
//scanf("%d%d", &a, &b);
//如果a和b都被成功读入,那么scanf的返回值就是2
//如果只有a被成功读入,返回值为1
//如果a和b都未被成功读入,返回值为0
//如果遇到错误或遇到end of file,返回值为EOF。
a[s1-'a'] = (s2>='0' && s2<='9') ? s2-'0' : a[s2-'a'];
//a?b:c 代表:
//如果a成立就执行b否则就为c。
//相当于else if
}
printf("%d %d %d",a[0],a[1],a[2]);
return 0;
}