☰
蓝桥杯_翻转_C++
2026/10/6 12:18:45 网站建设 项目流程

蓝桥杯_翻转_C++

    • 题目描述:
    • 题解:
      • 解题思路:
        • 思路:
      • 代码实现

题目描述:

蓝桥杯_翻转原题链接

题解:

解题思路:

思路:

1、S 和 T 都是由 多个0或1组合而成
① 数据输入:
第一行输入一个整数 D ,代表有 D 组 S和T 的组合
接下来 2D 行 依此代表[T1,S1,T2,S2,…,TD,SD]

② 数据处理:010 -> 000, 101->111,可转换。判断 S 是否可以转换为 T,若可转换,需进行几次 01 变换
可通过 S 和 T 的挨个比较来进行判断::

  • 若 S[i]==T[i] 则继续进行判断。
  • 若 S[i]!=T[i] 则看S[i] 是否满足转换条件 (S[i]!=S[i-1],S[i]!=S[i+1]) ,满足则转换S[i],最后看S是否与T相等来判断是否可以转换。

代码实现

#include<iostream>// 引入输入输出库#include<string>// 引入字符串库usingnamespacestd;// 使用标准命名空间intmain(intargc,charconst*argv[]){intD;// 用于存储测试用例的数量cin>>D;// 从标准输入读取测试用例数量intflag=0;// 初始化一个标识变量,这里并未使用// 循环处理每一个测试用例for(inti=0;i<D;i++){string S,T;// 声明两个字符串 S 和 Tcin>>T>>S;// 从输入读取两个字符串 T 和 Sintlen=S.size();// 获取字符串 S 的长度// 如果两个字符串相同,输出 0,表示不需要任何变换if(S==T){cout<<0<<endl;// 输出 0continue;// 跳过后续代码,进入下一次循环}// 如果 S 和 T 的首尾字符不同,输出 -1,表示无法通过变换匹配if(S[0]!=T[0]||S[len-1]!=T[len-1]){cout<<-1<<endl;// 输出 -1continue;// 跳过后续代码,进入下一次循环}intcount=0;// 计数器,用于记录所需变换的次数// 遍历字符串 S 的中间字符(不包括首尾)for(inti=1;i<len-1;i++){// 如果当前字符 S[i] 不等于 T[i]if(S[i]!=T[i]){// 检查当前字符 S[i] 的两侧字符是否与其不同if(S[i-1]!=S[i]&&S[i+1]!=S[i]){// 如果是,则将 S[i] 更改为 S[i-1]S[i]=S[i-1];count++;// 记录变换次数}else{break;// 如果不满足,停止变换}}}// 检查经过变换后 S 是否与 T 相等if(S==T){cout<<count<<endl;// 输出变换次数}else{cout<<-1<<endl;// 输出 -1,表示无法匹配}}return0;// 主函数返回 0,表示程序正常结束}

蓝桥杯_翻转_原题链接
欢迎大家和我沟通交流(✿◠‿◠)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询