首页 > 解决方案 > 当我给出一个以上的测试用例时,这显示错误的输出

问题描述

这是 codechef 一月挑战的第一个问题codechef。当我给出多个测试用例时,它给出了错误的输出。当我给出一个测试用例时,它是正确的。

my code:-
        

  #include<iostream>
       using namespace std;
         int long long N;
          int main()
       {
        int i,j, N,t,d,k,sum=0;
         cin>>t;
       for(j=1;j<=t;j++)
{
        cin>>N>>k>>d;
          for(i=0;i<N;i++)
            {
              int num;
                cin >> num;
                 sum += num;
            }

                  for(i=0;i<N;i++) 
              {
                 sum= int(sum/k);
                 if(sum>d)
                  {
                     cout<<d<<endl;
                     
                   }
                   
                   else
                   {
                       cout<<sum<<endl;
                    }
              }
          }
        return 0;
       }

标签: c++

解决方案


您的输出在错误的位置,它应该在测试用例循环内而不是在它之后。您还需要在每个结果后打印一个换行符

你的代码是这样的

   for(j=1;j<=t;j++)
   {
       ...
   }
   if(sum>d)
   {
        cout<<d;
   }
   else 
        cout<<sum;

但应该是这样的

   for(j=1;j<=t;j++)
   {
       ...
       if(sum>d)
            cout<<d<<'\n';
       else 
            cout<<sum<<'\n';
   }

如果您养成一致缩进代码的习惯,这样的错误就更容易发现。

另一个错误是您没有sum为每个测试用例重置为零。你的循环也应该是这样的

   for(j=1;j<=t;j++)
   {
       sum=0;
       ...
   }

一些草率的错误。要成为一名程序员,您确实必须注意细节。

免费,这里有另一个提示。你不需要使用数组来解决这个问题。要将数字相加,您无需先将它们全部放入数组中,然后再将它们相加。您可以在输入它们时添加它们。

int sum = 0;
for (int i = 0; i < N; i++)
{
    int num;
    cin >> num;
    sum += num;
}

推荐阅读