本题数据有误。

P1914 小书童——凯撒密码

sdyzpf @ 2023-12-06 19:03:28

经反复检查,本题存在多余的换行符,使使用getline和getchar函数的初学者无法正常通过本题,观察讨论区,已有多名初学者因此未能通过本题,受到误导。

证据:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    string s;
    cin>>n;
    char c=getchar();
    c=getchar();//此处吞掉了本不该存在的多余换行符,从而AC了本题,然而这行代码本应是错误的。
    getline(cin,s);
    for(int i = 0;i < s.size();i ++){
        int ss = s[i] + n;
        if(ss > 'z')ss -= 26;
        s[i] = ss;
    }
    cout<<s;
    return 0;
}

此外,还建议加强本题数据,本题存在初学者代码在易错点上出错却能通过本题的情况。

错误代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    string s;
    cin>>n
    cin>>s;
    for(int i = 0;i < s.size();i ++){
        int ss = s[i] + n;
        if(ss > 'z')ss -= 26;//错误点,用减法代替取模
        s[i] = ss;
    }
    cout<<s;
    return 0;
}

by sdyzpf @ 2023-12-06 19:04:14

@离散小波变换°

@Maxmilite

麻烦两位了。


by CEFqwq @ 2023-12-06 19:59:50

那不应该加上 1 \leq n \leq 26 吗()


by sdyzpf @ 2023-12-06 21:03:28

@爱肝大模拟的tlxjy 有道理()。


by Maxmilite @ 2023-12-08 20:48:24

@sdyzpf Fixed, thx.


|