Где именно ошибка в моем коде проверки дублирования? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытался выполнить повторную проверку в c ++ в задаче программирования, которая меня заинтересовала. Короче говоря, он предлагает пользователю ввести число, большее, чем 0, и меньшее, чем число введенных чисел.пользователь решает.Когда эта программа работает, она должна возвращать повторяющиеся числа, но когда я проверял ее, она печатает только случайные строки букв.

int arrCheck;
for(arrCheck=0; arrCheck<=arrLimit-1; arrCheck++)
{
    if(arr[abs(checkarr[arrCheck])]>=0)
    {
        arr[abs(checkarr[arrCheck])]=-arr[abs(checkarr[arrCheck])];
    }
    else
    {
       cout<<arr[arrCheck]+" "<<endl ;
    }
}

ArrLimit - это предел числа, определяемый пользователем.Числа в массиве checkArr [] на единицу больше, чем его аналоги arr [].

Для пояснения, идея, что в массиве из n чисел, он может быть заполнен только числами от 0 до n-1 включительноявляется частью проблемы.

Обновление: все, что ниже, - это строки кода, предшествующие разделу кода выше.

int main()

{
    cout<<"How many numbers do you want?";
    int arrLimit;
    cin>>arrLimit;
    int arr[arrLimit-1];
    int checkarr[arrLimit-1];

    int arrValue;
    int arrLoop=0;
    while(arrLoop<=arrLimit-1)
    {
        cout<<"Insert numbers (non negative integers only)";
        cin>>arrValue;
        if(arrValue<=arrLimit-1)
        {
            arr[arrLoop]=arrValue;
            checkarr[arrLoop]=arrValue+1;
        }
        else
        {
            cout<<"Invalid, try again!"<<endl;
            continue;
        }
        arrLoop+=1;
    }

1 Ответ

0 голосов
/ 11 сентября 2018

Давайте сделаем проработанный пример

How many numbers do you want?
2

Теперь arrlimit == 2, arr имеет размер 1, checkarr имеет размер 1

Insert numbers (non negative integers only)
1

Теперь arrvalue == 1, arrLoop == 0, arr [0] == 1, checkarr [0] == 2

Insert numbers (non negative integers only)
1

Теперь arrvalue == 1, arrLoop == 1, arr [1] == 1, checkarr [1] == 2. Последние два являются ошибкой, потому что arr и checkarr имеют размер 1, поэтому arr[1] и checkarr[1] являются незаконными. Но давайте проигнорируем это и продолжим.

Теперь мы находимся в последнем цикле, arrcheck == 0, поэтому arr[abs(checkarr[arrCheck])] >= 0 ==> arr[abs(checkarr[0])] >= 0 ==> arr[abs(2)] >= 0 ==> arr[2] >= 0, и снова arr [2] недопустим, потому что arr имеет только размер 1.

И так далее, в основном ваш код создает множество массивов за пределами доступа. Но, честно говоря, даже без них я не уверен, что алгоритм правильный.

...