1 条题解

  • 0
    @ 2025-5-3 21:32:13

    分析:

    此代码的核心思路是处理多组测试数据,针对每组数据,先把由字符 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
    上传者