User 14282016 Ответов: 2

Как я могу случайно выбрать?


Мне нужно случайным образом выбрать две строки в этом коде,

void init(int a[SIZE][SIZE], int sum[SIZE])
{
  srand(time(NULL));
  int i,j;
  for (i=0; i<SIZE; ++i)
  {
    sum[i] = 0;
    for(j=0; j<SIZE; ++j)
    {
      a[i][j] = rand() % 2;
      sum[i] += a[i][j];
    }
  }
}
void dump(int a[SIZE][SIZE], int sum[SIZE])
{
  int i,j;
  for (i=0; i<SIZE; ++i)
  {
    for(j=0; j<SIZE; ++j)
      printf("% 2d", a[i][j]);
    printf(" sum = %d\n", sum[i]);
  }
}


Что я уже пробовал:

Я пробовал некоторые коды, но не могу найти своего решения.

2 Ответов

Рейтинг:
1

OriginalGriff

Мы не можем вам сильно помочь, мы понятия не имеем, что это должно делать, а тем более то, что он делает, чего вы не ожидали или не сделали, что вы сделали.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей компиляторной системы, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем этого сделать для вас - пришло время освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
1

Rick York

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

Если вы хотите случайный выбор, то у вас уже есть это, по большей части. В принципе, это так

int GetRandomValue( int possibilities )
{
   return rand() % possibilities;
}
Сначала вы должны определить, сколько существует возможностей. Если вы хотите один из ряда то :
int possibilities = SIZE;
Если вы хотите один из Матрицы, то :
int possibilities = SIZE * SIZE;
Если вы хотите выбрать два варианта, то получите два случайных числа и убедитесь, что они не совпадают :
int select1 = GetRandomValue( possibilities );
int select2 = 0;
do
{
     select2 = GetRandomValue( possibilities );
} while( select1 == select2 );
Этот цикл будет продолжаться до тех пор, пока выбор не изменится.

Это то, о чем вы просите, или что-то другое?


[no name]

Спасибо за ваш ответ. Я хочу тебе все объяснить.

1 1 0 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 Количество = 11
0 1 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 0 0 количество = 9
1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 0 1 Количество = 14
1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 1 1 Количество = 15
0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 0 0 0 Количество = 12

Например это мой выход. Count = (Сколько 1 в строке)
Я случайным образом выберу две строки и сохраню значение той, которая больше. Я сделаю это дважды, и у меня будет две строчки.
После этого шага я сделаю кроссовер. Это проект генетического алгоритма. Пожалуйста, помогите мне. Это мой последний день для моего проекта.

Rick York

Последний фрагмент кода показывает, как случайным образом выбрать две разные строки. Вот о чем вы спрашивали, так что же вам еще нужно?

[no name]

Спасибо за вашу помощь.