系列中最大的产品

时间:2015-05-31 13:54:42

标签: c

Here是问题陈述。

  

找到N位数中K个连续数字的最大乘积   号。

     

输入格式

     

第一行包含T,表示测试用例的数量   每个测试用例的第一行将包含两个整数N& K.
  每个测试用例的第二行将包含一个N位整数。

     

输出格式

     

为每个测试用例打印所需的答案。

     

约束

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="ctrl">
    <div ng-repeat="item in items | findobj: findList">
      {{item}}
    </div>
    <hr/>
    <div ng-repeat="item in items | findobj: findList2">
      {{item}}
    </div>
    <hr/>{{usingservice}}
  </div>
</div>
     

示例输入

1≤T≤100  
1≤K≤7  
K≤N≤1000 
     

示例输出

2
10 5
3675356291
10 5
2709360626

这是我的代码

3150
0

我的输出输出错误,输出正确。简而言之,我的代码中存在一些错误,我无法找到它。我正在寻求帮助。

  错误输出

示例

     

INPUT

#include <stdio.h>

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,k;
        scanf("%d%d",&n,&k);
        char a[n];
        int b[n];
        int i,j;
        long long int x=1;

        for(i=0;i<n;i++)
            scanf("%c",&a[i]);
        int index;
        long long int max=0;

        for(i=0;i<n;i++)
            b[i]=a[i]-'0';

        for(i=0;i<n-k;i++)
        {
            x=1;
            for(j=i;j<i+k;j++)
                x*=b[j];
            if(x>max)
            {
                max=x;
                index=i;
            }
        }

        printf("%lld\n",max);
    }
    return 0;
}
     

输出

1
10 5
1111122222

1 个答案:

答案 0 :(得分:2)

在扫描以下行中数字的'\n'数字之前,您没有读取第一行末尾的n。因此,for(i=0;i<n;i++) scanf("%c",&a[i]);循环中读取的第一个字符不是数字,而是仍位于'\n'缓冲区中的stdin

您应该将第一个scanf更改为:

scanf("%d%d\n",&n,&k);

或使用fgets()

读取这两行