1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
дано N кубиков, на кубике уникальное число, упорядочить за минимальное количество обменов. Откровенно говоря теряюсь в догадках собственно процесса вот этого поиска минимального количества обменов.... Потому очень прошу помочь написанием этой проги на Си, особо благодарен буду если в исходник внедрите хоть небольших комментарии процесса, дабы понять происходящее.....
Хотелось бы отметить, что если к тонить знает верное решение, но в написании программы затрудняется, то скажите хоть ход мыслей.... но вообще конечно оооочень прошу помочь и исходничком
cube = (int*)malloc(n * sizeof(int)); // выделяем память под массив (см. malloc в хелпе ...)
for (unsigned i = 0; i < n; i++) // цикл: заполняем массив { printf("cube[%d] = ", i); scanf("%d", (cube + i)); }
int PCOUNT = 0; // обнуляем счетчик перестановок
for (i = 0; i < n - 1 ; i++) // для каждого элемента от первого до _предпоследнего_ .... { int nPos = i; // его новая позиция в массиве пока прежная
for (int j = i; j < n; j++) // просматриваем все элементы которые следуют за ним if ((cube[j] < cube[nPos])) /* если какой-то из них < исследуемого, значит, исследуемый элемент не на своей позиции, меняем ее */ nPos = j;
if (nPos != i) // если для элемента была найдена новая позиция, меняем местами ... { int T = cube[i]; cube[i] = cube[nPos]; cube[nPos] = T;
PCOUNT++; // и увеличиваем счетчик перестановок }
}
printf("\n");
for (i = 0; i < n; i++) printf("%3d", cube[i]); // выводим массив
Здравствуйте. Огромное спосибо за решение. Во твозник вопрос решение которого немног озбивает с толку, а каким образом можно доказать что получается реально минимальное количество перестановок. Нам сказали что есть некий способ доказать от противного (не обязательно так но можно), но вот излишних подробностей не сообщили - вот очень прошу помочь, а галвнео понять яки это делается