2 条题解

  • 9
    @ 2023-11-8 20:53:07

    c=m+(k-'A')

    m=c-(k-'A')

    但因为当k-'A'比c大时,可能会从 c='A'成'8',='a'成'[',

    a越位Z中是有其他字符的ASCll(91-96),原来大小写也会变

    因此(c[i]<='Z'&&m[i]<'A'||c[i]>='a'&&m[i]<'a')判断是否越位

    +32-('a'-'Z'-1) :+32越位后要提上去,-('a'-'Z'-1):-ASCll(91-96)

    代码为本人自创,想了一个小时多,

    查了下ASCll表,不仅有ASCll(91-96)

    [我一直以为Z完了就是a,没想到还有ASCll(91-96),吐血],

    还有越位问题,更吐血 点个赞支持一下吧

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
        string k,c; char m[1005]; cin>>k>>c;
        for(int i=0;i<k.size();i++)if(k[i]>='a')k[i]-=32;
        for(int i=0;i<c.size();i++){
            m[i]=(char)(c[i]-k[i%k.size()]+'A');
            if(c[i]<='Z'&&m[i]<'A'||c[i]>='a'&&m[i]<'a')
                m[i]=(char)(c[i]+32-('a'-'Z'-1)-k[i%k.size()]+'A');}
        for(int i=0;i<c.size();i++)cout<<m[i]; return 0;}
    
  • 1
    @ 2023-12-9 20:42:42
    #include<iostream>
    using namespace std;
    int n,m,a[10001],p;
    string mp[26];
    int main()
    {
        string keys,s;
        cin>>keys>>s;
        int len1=s.length(),len2=keys.length();
        for(int i=0;i<len1-len2;i+=1)keys+=keys[i%len2];
        mp[0]="abcdefghijklmnopqrstuvwxyz";
        for(int i=1;i<=25;i+=1)for(int j=0;j<=25;j+=1)mp[i]+=mp[0][(j-i+26)%26];
        for(int i=0;i<len1;i+=1)
        {
            int keyi,keyj;
            if(keys[i]>='a')keyi=keys[i]-'a';
            else keyi=keys[i]-'A';
            if(s[i]>='a')
            {
                keyj=s[i]-'a';
                cout<<mp[keyi][keyj];
            }
            else
            {
                keyj=s[i]-'A';
                cout<<(char)(mp[keyi][keyj]-32);
            }
        }
    }
    
    • 1

    信息

    ID
    543
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    261
    已通过
    96
    上传者