60分蒟蒻求帮助!

P1914 小书童——凯撒密码

jinyifei @ 2021-05-28 13:08:01

3,4点都错了......

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string n;
    int m;
    cin>>m>>n;
    int p=m;
    for(int i=0;i<n.size();i++)
    {
       if(m>26) m=m%26;
       n[i]=int(n[i])+m;
       if(n[i]>122) n[i]=int(n[i])-p/26*26;
       cout<<char(n[i]);
    } 
    return 0;
 } 

蒟蒻不胜感激!!!泪奔


by 听取OLE声一片 @ 2021-05-28 13:25:46

主页双帖,危


by PY_Fighter @ 2021-05-28 14:21:43

1.n[i]=int(n[i])-p/26*26;

你这个p是什么鬼……已经和原来的m没关系了呀

可以给你举个反例 n[i]='z',m=1,你的程序就不对了呀

因为m已经对26取模过了,m一定<26,所以你只需要n[i]-=26就可以了

2.但此时还是不对~因为n[i]+m的范围可能会超过ASCLL码的范围(0~127),所以会炸

应该在+m之前提前判断是否需要-26

给你改好的代码如下

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string n;
    int m;
    cin>>m>>n;
    int p=m;
    for(int i=0;i<n.size();i++)
    {
       if(m>26) m=m%26;
       if(n[i]+m>122) n[i]=n[i]+m-26;
       else n[i]=n[i]+m; 
       cout<<char(n[i]);
    } 
    return 0;
 }

(C++里面不同类型的变量可以直接进行运算(会自动转成int类型运算),不用int或者char)


by PY_Fighter @ 2021-05-28 14:33:14

@jinyifei


by jinyifei @ 2021-05-29 09:04:58

@PY_Fighter 谢谢你 我发现我比蒟蒻还蒻嘤


by PY_Fighter @ 2021-05-29 09:35:12

@jinyifei 没错蒟蒻就是我


|