P1597 语句解析

一 首先,题目关于abc的赋值可能不止一次,例如a:=3;b:=4;c:=5;a:=6;所以直接输入scanf("a:=%c;b:=%c;c:=%c;",&a,&b,&c);这类肯定是错的,而且其可能出现字母给字母赋值,例如a:=3;b:=4;c:=5;a:=b,所以输入的时候必须是输入一个字符串或者一直输入字符
二 注意这道题我们只需要注意一个字母和对其赋的值就好了,而通过样例可以看出,每个值之间都是隔了五个下标长度,而每个字母与其对应的值间则是隔了3个长度,所以,我们可以通过一个for循环找每个值的下标,再将它的下标-3,就是其对应赋值的字母下标
三 将每个字母转化成其相对应的数字下标,这样就可以存在ans数组里,例如'a'-'a'=0,'b'-'a'=1,'c'-'a'=2,之后在其字母给字母赋值的时候,就可以通过字母转化下标变成ans[0]=ans[1]这种形式。
具体的可以看看我美丽大方动人风流倜傥的代码
点击查看代码
int ans[4]; // 存abc每个字母的值
int main()
{
string s;
cin >> s;
for (int i = 3; i < s.size(); i += 5) // 注意i找的是值下标,而初始下标是3,每个数字间隔5,所以i+=5(不懂的话看题目样例)
{
if (s[i] >= '0' && s[i] <= '9') // 如果是数字给字母赋值
{
ans[s[i - 3] - 'a'] = s[i] - '0'; // s[i-3]是其对应赋值的字母下标,s[i-3]-'a'将其转化成字母在ans中对应的下标,还要注意虽然值是数字,但这是字符串,所以它的类型是字符,要通过-‘0’转化成数字;
}
else // 不是数字的话就是字母给字母赋值
{
ans[s[i - 3] - 'a'] = ans[s[i] - 'a'];//这个如上解释
}
}
cout << ans[0] << " " << ans[1] << " " << ans[2];
return 0;
}
浙公网安备 33010602011771号