蓝桥杯_翻转_C++

蓝桥杯_翻转_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 的挨个比较来进行判断::

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

代码实现

cpp 复制代码
#include <iostream> // 引入输入输出库
#include <string>   // 引入字符串库
using namespace std; // 使用标准命名空间

int main(int argc, char const *argv[])
{
    int D; // 用于存储测试用例的数量
    cin >> D; // 从标准输入读取测试用例数量
    int flag = 0; // 初始化一个标识变量,这里并未使用
    
    // 循环处理每一个测试用例
    for (int i = 0; i < D; i++){
        string S, T; // 声明两个字符串 S 和 T
        cin >> T >> S; // 从输入读取两个字符串 T 和 S
        int len = S.size(); // 获取字符串 S 的长度
        
        // 如果两个字符串相同,输出 0,表示不需要任何变换
        if (S == T){
            cout << 0 << endl; // 输出 0
            continue; // 跳过后续代码,进入下一次循环
        }
        
        // 如果 S 和 T 的首尾字符不同,输出 -1,表示无法通过变换匹配
        if (S[0] != T[0] || S[len - 1] != T[len - 1]){
            cout << -1 << endl; // 输出 -1
            continue; // 跳过后续代码,进入下一次循环
        }

        int count = 0; // 计数器,用于记录所需变换的次数
        
        // 遍历字符串 S 的中间字符(不包括首尾)
        for (int i = 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,表示无法匹配
        }
    }
    
    return 0; // 主函数返回 0,表示程序正常结束
}

蓝桥杯_翻转_原题链接

欢迎大家和我沟通交流(✿◠‿◠)

相关推荐
小成202303202652 小时前
C++~07补充
开发语言·c++
小郎君6582 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧2 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm3 小时前
40 二叉树的直径
c++·leetcode
Shimeri3 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
解决小子3 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
Evand J4 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang4 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖4 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy4 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化