1 条题解
-
0
分析:
此代码的核心思路是处理多组测试数据,针对每组数据,先把由字符 U、C、D 构成的字符串转换为整数,再对这些整数进行指定的运算,最后将运算结果和目标值比较,判断是否相等。
解题原理
字符串转整数:借助按位左移和加法运算,把字符串中的每个字符 U、C、D 分别映射为 1、2、3,并累加到结果里。
整数运算:依据输入的操作符 A、L、R 分别执行加法、左移、右移操作。
结果判断:将最终运算结果和目标值对比,若相等则输出 YES,反之输出 NO。
实现步骤
1.输入处理:读取测试数据的组数 T。
2.数据处理:针对每组测试数据,读取 6 个字符串。
3.字符串转整数:调用 fun 函数把前两个字符串转换为整数 x 和 y。
4.整数运算:对 y 按照后续 3 个操作符字符串进行运算。
5.结果判断:把 y 和最后一个字符串转换后的整数比较,输出判断结果。
6.输出结束标记:全部测试数据处理完毕后,输出结束标记。
C++实现:
#include <iostream> #include <cstdio> #include <string> using namespace std; int fun(string s) { int res=0; for(int i=0;i<s.size();i++) { res=res<<2; if(s[i]=='U') { res=res+1; }else if(s[i]=='C') { res=res+2; }else if(s[i]=='D') { res=res+3; } } return res; } int main() { int T; cin>>T; cout<<"COWCULATIONS OUTPUT"<<endl; while(T--) { string s[6]; for(int i=0;i<6;i++) { cin>>s[i]; } int x=fun(s[0]); int y=fun(s[1]); //cout<<x<<" "<<y<<endl; for(int i=2;i<5;i++) { if(s[i]=="A") { y=x+y; }else if(s[i]=="L") { y=y<<2; }else if(s[i]=="R") { y=y>>2; } //cout<<y<<endl; } //cout<<fun(s[5])<<endl; if(fun(s[5])==y) { cout<<"YES"<<endl; }else { cout<<"NO"<<endl; } } cout<<"END OF OUTPUT"<<endl; }
- 1
信息
- ID
- 525
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者