C Упражнения: Найти минимальное количество перестановок, необходимое для сбора всех элементов меньше или равно k
C Массив: упражнение 105 с решением
Напишите программу на C, чтобы найти минимальное число перестановок, необходимое для сбора всех элементов, меньших или равных k.
Пример решения:
Код C:
#include<stdio.h>
int minSwap(int *arr1, int n, int k)
{
int ctr = 0;
for (int i = 0; i < n; ++i)
if (arr1[i] <= k)
++ctr;
int gelem = 0;
for (int i = 0; i < ctr; ++i)
if (arr1[i] > k)
++gelem;
int noswp = gelem;
for (int i = 0, j = ctr; j < n; ++i, ++j)
{
if (arr1[i] > k)
{
--gelem;
}
if (arr1[j] > k)
{
++gelem;
}
}
if(noswp>gelem)
{
noswp=gelem;
}
if(noswp<gelem)
{
noswp=noswp;
}
return noswp;
}
int main()
{
int arr1[] = {2, 7, 9, 5, 8, 7, 4};
int n = sizeof(arr1) / sizeof(arr1[0]);
int k = 7;
int i = 0;
//------------- print original array ------------------
printf("The given array is: \n");
for(i = 0; i < n; i++)
{
printf("%d ", arr1[i]);
}
printf("\n");
//-----------------------------------------------------------
printf("The minimum swap required is: %d",minSwap(arr1, n, k));
return 0;
}
Пример вывода:
Данный массив: 2 7 9 5 8 7 4 Требуемый минимальный своп: 2
Блок-схема 1:
Блок-схема 2:
Редактор кода программирования C:
Улучшите этот пример решения и опубликуйте свой код через Disqus.
Предыдущий: Напишите программу на C, чтобы переставить массив так, чтобы четные элементы индекса были меньше, а нечетные элементы индекса были больше, чем их следующие.
Далее: написать программу на C для преобразования массива таким образом, чтобы удвоить его значение, и заменить следующее число на 0, если текущий и следующий элемент совпадают, и переставить массив так, чтобы все 0 сдвинулись до конца.
Новый контент: Composer: менеджер зависимостей для PHP , R программирования