C++课后习题训练记录Day140
1.练习项目 问题描述小蓝有很多齿轮每个齿轮的凸起和凹陷分别用一个字符表示一个字符串表示一个齿轮。如果两个齿轮的对应位分别是同一个字母的大小写我们称这两个齿轮是契合的。例如AbCDeFgh和aBcdEfGH就是契合的但是abc和aBC不是契合的。这天小蓝的弟弟小桥从抽屉里拿来了两个齿轮小蓝想知道这俩个齿轮是不是契合的。特别需要注意的是齿轮是环形的所以是可以旋转的顺时针和逆时针均可如果是契合的小蓝还想让你告诉他最少将第一个齿轮旋转多少位两个齿轮可以完全契合在一起。例如AbbCd与BcDaB在将第一个齿轮逆时针旋转两位后变成bCdAb两个齿轮就完全契合在一起了。输入格式第一行输入一个正整数 n 代表两个齿轮的长度。第二行输入一个长度为 n 的字符串 S 代表第一个齿轮。第三行输入一个长度为 n 的字符串 T 代表第二个齿轮。输出格式第一行输出一个字符串Yes或者No。代表两个齿轮是否契合。如果可以契合第二行输出一个整数代表需要旋转的位数。如果不可以契合不用多余输出。2.选择课程在蓝桥云课中选择题库选择题号5132并开始练习。3.开始练习1源码 #includebits/stdc.husing namespace std;const int N 1e610;string s,t;int nex[N];bool tag;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cinnst;for(int i0;in;i){s[i]isupper(s[i])?tolower(s[i]):toupper(s[i]);}sss;s s,t t;nex[0]nex[1]0;for(int i2,j0;in;i){while(jt[i]!t[j1])jnex[j];if(t[i]t[j1])j;nex[i]j;}int ans1e9;for(int i1,j0;i2*n;i){while(js[i]!t[j1])jnex[j];if(s[i]t[j1])j;if(jn){tagtrue;ansmin({ans,abs(i-n),2*n-i});}}if(tag)coutYes\nans\n;else coutNo\n;return 0;}2检验结果对此代码进行检验检验后无报错提交此代码判题结果为正确100分。3练习心得注意每段代码末尾的分号是否存在 如不存在则需即使补充输入法 是否切换为英语模式语法是否错误。