SPOJ显示我的解决方案的错误答案:http://www.spoj.com/BSCPROG/problems/SMPCPH1/

时间:2016-07-08 17:23:24

标签: c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main() {
    int n, m, i, j, k;
    char a[100], b[100];
    scanf("%d", &n);
    if (n > 26 && n <= 1)
        exit(0);
    scanf("%s", a);
    scanf("%d", &m);
    if (m > 100 && m <= 1)
        exit(0);
    for (i = 0; i < m; i++) {
        fgets(b, 100, stdin);
        for (j = 0; b[j] != '\0'; j++) {
            for (k = 0; k < n; k++) {
                if (a[k] == b[j]) {
                    if (k == (n - 1)) {
                        b[j] = a[0];
                        break;
                    } else {
                        b[j] = a[k+1];
                        break;
                    }
                }
            }
        }
        printf("%s",b);
    }
    return 0;
}
  

我刚刚为此问题编写了C代码:http://www.spoj.com/BSCPROG/problems/SMPCPH1/   在给定的例子中,我的程序给出了期望的结果,但是spoj说它是错误的。我怎么能找到错误?

1 个答案:

答案 0 :(得分:0)

您的代码需要进行3次更改:

  • 在参数验证测试中使用||代替&&
  • 在解析为m的号码后扫描并忽略换行,否则下一个fgets()将读取空行

以下是更正后的代码:

if (n > 26 || n <= 1)
    exit(0);
scanf("%s", a);
scanf("%d%*c", &m);
if (m > 100 || m <= 1)
    exit(0);