2017-04-23 43 views
-2

我在做一个编程问题,其中一个示例输出是64197148392731290.我的代码对于这个问题是正确的,因为它给了我其他测试用例(这些测试用例的输出是单个数字)的正确答案。C中的“无输出”结果?

我知道测试用例有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 8
abzbabzbazab 

输出:

6 
2 
64197148392731290 

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

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

第二行包含一个字符串S.其长度恰好为N,并且其每个字符都是小写英文字母。

+1

到目前为止你做了什么?如果您有代码,请将其展示给我们,以便我们帮助您。学习[如何提出一个好问题。](https://stackoverflow.com/help/how-to-ask) –

+1

你还没有告诉我们代码应该做什么!从例子中解决这个问题是可能的。但为什么我们应该努力工作 - 你不必! – Clifford

+1

'char a [n];'是不够的。 'strcat(a,a);'是未定义的行为。 – BLUEPIXY

回答

1

如果你想存储在“INT”这不会怎么把这个号码的工作超出范围的输入,将其更改为“长长整型”

那么以前的答案是肯定错了。感谢代码。

对不起,没有时间进行详细的研究,但初步分析告诉我,也许错误是因为你试图在一个[n]中存储长度为2n的刺。它适用于较小的值,因为当您声明

char a[n]; 
    ^
    variable known at runtime 

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

Not sure image is well visible

基本上某处行字符串被损坏。最有可能是因为strcat。我建议删除strcat,做其他类似的效果。

+0

评论,而不是答案;因为代码已发布在您的评论之后,我t在任何情况下都比在“long long”中存储的值清楚。 – Clifford

+0

你会得到什么输出案例3? –

+0

@ParthK无输出。 – Jeff