На каждом шаге имеет смысл менять два горшка с разными цветами. Поэтому всё получится, если роз, стоящих на чётных местах, будет столько же, сколько и фиалок на нечётных. При этом если тех и других k, то всего нужно k перестановок. Код (PascalABC.NET 3.2): begin var n := ReadInteger(); var roses := new integer[n]; var count_roses := 0; var violets := new integer[n]; var count_violets := 0; for var i := 1 to n do begin if ReadInteger() = i mod 2 then if i mod 2 = 0 then begin roses[count_roses] := i; inc(count_roses); end else begin violets[count_violets] := i; inc(count_violets); end; end; if count_roses = count_violets then begin writeln(count_roses); for var i := 0 to count_roses - 1 do println(roses[i], violets[i]); end else write(-1) end.
#include <iostream>
#include <stdio.h>
#include <time.h>
void sort(int leng,int *arr){
for (int i =0;i < leng;++i){
for (int j = 0;j < leng - 1;++j){
if (arr[i] > arr[j]){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
int main (){
setlocale(LC_ALL,"");
srand(time(NULL));
int A[10];
for (int i = 0;i < 10;++i){
A[i] = rand() % 10;//Рандомное число от 0...9
}
sort(10,A);//сортировка массива
//2 задание увы не успеваю сделать сейчас,если не забуду о вас то Удачи)))
system("pause");
return 0;
}