один и тот же ввод разные тесты разные ответы - PullRequest
0 голосов
/ 30 октября 2018

Программа должна выяснить, меньше ли количество элементов в массиве, которые не равны 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-м тестовом случае цикл работает только для i = 0 для данного 5-го случая, затем он прерывается.

1 Ответ

0 голосов
/ 31 октября 2018

В цикле, где вы принимаете свой ввод, вы приняли условие '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;
}
...