相同的输入不同的测试用例不同的答案

时间:2018-10-30 15:01:04

标签: dynamic c++14

程序将找出数组中不等于1的元素的数量是否小于给定的整数'k'(程序输入)。 该程序将输入't',即测试用例的数量,'n'作为数组中元素的数量,'k'在问题陈述中定义。

t->测试用例

我的程序:

#include<iostream>

using namespace std;

int main(){
    int t;
    cin >> t;
    while(t--){
        int n,k;
        cin >> n >> k;
        int a[n];

        for(int i=0;i<n && k>=0;i++){

            cin >> a[i];
            if(a[i]!=1)
                k--;
        }
        if(k>=0)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;

    }
    return 0;
}

我的输入:
6
2 2
1 2
5 6
1 2 2 2 2
5 3
2 2 10 1 1
5 3
3 5 6 4 1
5 3
3 5 6 4 1
5 3
3 5 4 4 1

输出:






问题:在第4和第5个测试用例中,输出是不同的。

我能理解的问题是,仅在第5个测试用例中,对于给定的第5个情况,循环仅针对i = 0运行,然后中断。

1 个答案:

答案 0 :(得分:0)

在您进行输入的循环中,您已满足条件'i = 0',即,如果k小于0(在大于'k'的数字不等于1的情况下) ),那么它就会跳出循环,但是您将完整的数组(用于相同的测试用例)作为输入,但是您的程序没有为继续进行的同一测试用例获取输入。不要将k> = 0作为循环的中断条件。

更正的代码:

    #include<iostream>
    using namespace std;
    int main(){
    int t;
    cin >> t;
    while(t--){
        int n,k;
        cin >> n >> k;
        int a[n];

        for(int i=0;i<n;i++){      // change in this line

            cin >> a[i];
            if(a[i]!=1)
                k--;
        }
        if(k>=0)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;

    }
    return 0;
}