求助了,用VS没问题,但是提交就五个WA,哇哇哇......

P1914 小书童——凯撒密码

shadowest @ 2019-04-10 00:45:39

#include<stdio.h>
int main(void)
{
    int n;
    int i = 0;
    int p;
    char word[100];
    char key[100];
    scanf("%d", &n);
    p = n;
    getchar();
    while ((word[i] = getchar()) != '\n')
        i++;
    for (int m = 0; m < i; m++)
    {
        if (word[m] + n <= 'z')
            key[m] = word[m] + n;
        else
        {
            while (word[m] + p > 'z')
            {
                p = p - 26;
            }
            key[m] = word[m] + p;
        }
        p = n;
    }
    for (int a = 0; a< i; a++)
    {
        printf("%c", key[a]);
    }
    return 0;
}

by ddwqwq @ 2019-04-10 02:33:24

虽然VS很强,但它还没有聪明到足以自动查错的地步呀QwQ


by LoctStrider @ 2019-04-10 07:03:33

虽然 VS 很强,但它还没有聪明到足以和 GNU GCC 编译效果完全一样啊

为防止换行符的问题(Windows 与 Unix 系的差别),最好用 scanf("%s", str) 的形式输入字符串,用 <string.h> 中的 strlen(str) 获取字符串长度。

比如把代码写成这样:

int n, len;
char li[55];
scanf("%d%d", &n, li + 1);
len = strlen(li + 1);
for (int i = 1; i <= len; ++i)
    // do something

这样写对于平台差异的容错性更好。

(另:直接在输入后执行 n %= 26 会好写不少啊……最多只会减一次 26)


by LoctStrider @ 2019-04-10 07:05:37

上面打错了……

scanf("%d%s", &n, li + 1);

by shadowest @ 2019-04-10 12:50:15

@LKC314

谢谢大佬,改成你说的那样我就过了

一开始我用

while (getchar() != '\n')
        continue;

消除换行符的影响,结果直接五个RE了,真的奇奇怪怪.....


by whhsteven @ 2019-07-14 18:27:29

我在Linux(Ubuntu 16.04 LTS)下写的代码,终端运行好像也还没什么问题,为什么交到洛谷这儿就5个WA了?

据我所知洛谷用的Linux。

代码如下:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    string src;
    string rst;
    getline(cin,src);
    n %= 26;
    for(int i=0;i<(int)src.length();i++)
    {
        if(src[i] + n > 'z') rst[i] = src[i] +  n - 26;
        else rst[i] = src[i] + n;
    }
    for(int i=0;i<(int)src.length();i++) cout << rst[i];
    return 0;
}

by whhsteven @ 2019-07-14 18:34:28

@shadowest

对了,你是怎么配置VS的?我想用VS写C好像从来没有成功过。

现在用VS写C++好像还挺爽的~


|