2 条题解

  • 1
    @ 2023-4-24 20:41:53
    def funct(text, key):
        alph=list("abcdefghijklmnopqrstuvwxyz")
        alphup=list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
        textup=True
        if(text in alph):
            textnum=alph.index(text)
            textup=False
        else:
            textnum=alphup.index(text)
        if(key in alph):
            keynum=alph.index(key)
        else:
            keynum=alphup.index(key)
        result=alph[(textnum - keynum) % 26]
        if(textup):
            result=alphup[alph.index(result)]
        return result
    key1=input()
    text1=input()
    newtext=""
    for i in range(len(text1)):
        newtext+=funct(text1[i],key1[i%len(key1)])
    print(newtext)
    
    • 1
      @ 2023-4-12 18:59:16

      介绍一个知识,ASCII的a是0110 0001B开始的,而A是从0110 0001B开始的。对于每个char i,i&31(011111)即为其在字母表中的序列,而不管他是大写还是小写,这样就可以实现代码长度的大大缩短。

      至于格式...可以用lower,也可以直接判断位数是否大于0,不大于就+26。

      #include <iostream>
      using namespace std;
      int main() {
      	string k,c;
      	cin>>k>>c;
      	for (int i=0;i<c.length();i++) {
      		int t=(k[i%k.length()]&31)-1;
      		c[i]=(c[i]&31)-t>0?c[i]-t:c[i]-t+26;
      	}
      	cout<<c<<endl;
      	return 0;
      }
      
      • @ 2024-3-1 9:53:48

        蹭一下楼发个python翻译

        k = input()
        c = list(input())
        for i in range(len(c)):
            t = (ord(k[i % len(k)]) & 31) - 1
            c[i] = chr(ord(c[i]) - t) if (ord(c[i]) & 31) - t > 0  else chr(ord(c[i]) - t + 26)
        print(''.join(c))
        
    • 1

    信息

    ID
    138
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    291
    已通过
    100
    上传者