C ++ совершенная случайная логическая ошибка, я не могу исправить это? - PullRequest
0 голосов
/ 25 апреля 2020

Предполагается, что код выполняет совершенное перемешивание массива целых чисел. Совершенное перемешивание - это последовательность, полученная путем чередования его первой половины со второй половиной, всегда перемещая среднюю карту вперед. Например, идеальный случайный порядок {1,2,3,4,5,6,7,8,9,10} равен {6,1,7,2,8,3,9,4,10,5} Проблема с моим кодом в том, что он не отображает желаемый результат, вместо этого он показывает сумму случайных чисел. Заранее спасибо

Вот код:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    int userArray[25], a[20], b[20];
    int i, sizeofarray, half, j, m;

    A: cout << "Enter SIZE of even numbers: ";
    cin >> sizeofarray;
    if (sizeofarray % 2 != 0)
    {
        cout << "Wrong Input!!,you should enter an even size (2,4,...)";
        system("PAUSE");
        system("CLS");
        goto A;
    }
    cout << "Enter  numbers:  \n";
    for (i = 0; i < sizeofarray; i++)
    {
        cin >> userArray[i];
    }

    // for(i=0;i<sizeofarray;i++)
    //{

    half = sizeofarray / 2;
    cout << "The perfect shuffle is: \n";
    for (j = 0; j <= half; j++)
    {
        a[j] = userArray[j];
        cout << a[j];
    }
    for (m = half; m <= sizeofarray; m++)
    {
        b[m] = userArray[m];
        cout << b[m];
    }

//}

    return 0;
}

1 Ответ

1 голос
/ 25 апреля 2020

По причинам отладки вы должны разделить процесс записи пользовательского ввода и написания самого алгоритма. Потому что тестирование с помощью тестовых сценариев, написанных в коде, может сэкономить вам много времени.

Я бы написал алгоритм перемешивания следующим образом: (edit)

  for(int i = 0; i < half; i++) {
    shuffledArray[i*2+1] = arr[i];
    shuffledArray[i*2] = arr[i+half];
  }

В этом примере предполагается, что ваш выходной (перемешанный) массив называется shuffleArray, входной массив называется arr, и вы иметь целочисленную переменную с именем size.

Будет работать только с бинарным перемешиванием. Если вы хотите перемешать на 3 или 4, это может быть немного по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...