ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1052756 Топик полностью
fk0, легенда (16.11.2020 12:04, просмотров: 349) ответил Tpoeшник на Нужно случайным образом разбить на пары людей. Например для игры в теннис 2на2 во время обеденного перерыва. Половые и другие признаки не учитываются, кол.во людей может быть n человек. Язык Си. Честно ли будет получаться?
Нужно N раз подряд переставить рандомные элементы в списке и вывести его попарно: 
#include <stdio.h>
#include <alloca.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

const char *const employees[] = {"Ксения", "Саша", "Маша", "Генерал", "Валерий", "Д.Трамп", "Троешник", "Вован"};


int main()
{
    srand(time(NULL));
    
    char **p = alloca(sizeof(employees));
    memcpy(p, employees, sizeof(employees));
    
    const unsigned m = sizeof(employees) / sizeof(employees[0]);
    unsigned n = m;
    while (n --> 0)\
    {
        unsigned i = (unsigned long)m * rand() / RAND_MAX;
        unsigned j = (unsigned long)m * rand() / RAND_MAX;
        char *t = p[i];
        p[i] = p[j], p[j] = t;
    }
    
    n = m >> 1;
    while (n --> 0)
        printf("%16s <> %s\n", p[0], p[1]), p += 2;
    
 
    return 0;   
}
[ZX]