题解

凌艺樽  •  4个月前


#include<bits/stdc++.h>
#pragma GCC optimize(3)
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
const int N=1e2+10;
const int INF=0x3f3f3f3f;
string s,k;
int l,a[N];
int main()
{
	IOS;
	cin>>k>>s;
	for(int i=0;i<k.size();++i)
	{
		if(k[i]<='z' && k[i]>='a')
		{
			k[i]-=32;
		}
		a[++l]=(int)(k[i]-'A');
		//cout<<a[l]<<" ";
	}
	//cout<<endl;
	l=1;
	for(int i=0;i<s.size();++i)
	{
		if(s[i]-a[l]<'A' && s[i]>='A' && s[i]<='Z')
		{
			int maxx=s[i]-'A';
			s[i]='Z'-(a[l]-maxx);//+
		}
		else if(s[i]-a[l]<'a' && s[i]>='a' && s[i]<='z')
		{
			int maxx=s[i]-'a';
			s[i]='z'-(a[l]-maxx)+1;
		}
		else
		{
			s[i]-=a[l];
		}
		cout<<s[i];
		l++;
		if(l>k.size())
		{
			l=1;
		}
	}
    return 0;
}
//为防抄题解,有1处需经过修改才能AC


评论:

直接把你的代码1秒修改好

#include<bits/stdc++.h>
#pragma GCC optimize(3)
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
const int N=1e2+10;
const int INF=0x3f3f3f3f;
string s,k;
int l,a[N];
int main()
{
	IOS;
	cin>>k>>s;
	for(int i=0;i<k.size();++i)
	{
		if(k[i]<='z' && k[i]>='a')
		{
			k[i]-=32;
		}
		a[++l]=(int)(k[i]-'A');
	}
	l=1;
	for(int i=0;i<s.size();++i)
	{
		if(s[i]-a[l]<'A' && s[i]>='A' && s[i]<='Z')
		{
			int maxx=s[i]-'A';
			s[i]='Z'+(a[l]-maxx);
		}
		else if(s[i]-a[l]<'a' && s[i]>='a' && s[i]<='z')
		{
			int maxx=s[i]-'a';
			s[i]='z'-(a[l]-maxx)+1;
		}
		else
		{
			s[i]-=a[l];
		}
		cout<<s[i];
		l++;
		if(l>k.size())
		{
			l=1;
		}
	}
    return 0;
}

黄戈  •  4个月前

大写字母是加才能转换为小写字母,,减的话可能会出现奇奇怪怪的错误,比如空符等


黄戈  •  4个月前