首页 文章

C中的“无输出”结果?

提问于
浏览
-2

我正在编写一个编程问题,其中一个示例输出是64197148392731290 . 我对该问题的代码是正确的,因为它为我提供了其他测试用例的正确答案(这些测试用例的输出是单个数字) .

我知道测试用例的迭代次数太多,其输出为64197148392731290 . 那么我该怎么办才能得到正确的答案 .

这是代码:

#include<stdio.h>
#include<string.h>
int main() {
    int test_case;long long int i, j, count, n, k, k1;
    scanf("%d", &test_case);
    while(test_case--) {
        scanf("%lld%lld", &n, &k);
        char a[n];
        count=0;
        k1=k;
        scanf("%s", a);
        while(k1--) {
            strcat(a,a);
        }
        for(i=0;i<(n*k);i++) {
            if(a[i]=='a') {
                for(j=(i+1);j<(n*k);j++) {
                    if(a[j]=='b') {
                        count++;
                    }
                }
            }
        }
        printf("%lld\n", count);
    }
    return 0;
}

样本输入和输出:

输入:

3
4 2
abcb
7 1
aayzbaa
12 80123123
abzbabzbazab

输出:

6
2
64197148392731290

我的任务是计算新字符串中子序列“ab”(不一定是连续的)的数量 . 输入的第一行包含一个整数T,表示测试用例的数量 . T测试案例的描述如下 .

每个测试用例的第一行包含两个整数N和K,分别表示初始字符串S的长度和重复次数 .

第二行包含一个字符串S.它的长度恰好是N,每个字符都是一个小写的英文字母 .

1 回答

  • 1

    如果你试图将输入存储在“int”中,因为这个数字超出了范围,将其更改为“long long int”

    那么之前的答案肯定是错的 . 谢谢你的代码 .

    抱歉没有时间进行详细研究,但初步分析告诉我,错误可能是因为你试图在[n]中存储长度为2n的刺 . 当你声明时,它适用于较小的值

    char a[n];
           ^
       variable known at runtime
    

    它实际上分配了一个大块,以便在范围内的任何n值都可以 . 对于较大的值 strcat(a,a) 可能会失败 .

    Not sure image is well visible

    基本上在某个地方,字符串变得腐败 . 最有可能是因为strcat . 我建议删除strcat,做一些类似的效果 .

相关问题