mọi người cho e hỏi đoạn code này sao ko chạy đc vậy
ĐỀ BÀI : nhập vào 1 dãy n phần tử in ra số làm hoán vị ít nhất sao cho tạo ra dãy mà số chẵn ở vị trí chẵn
số lẻ ở vị trí lẻ
#include <stdio.h>
#include <conio.h>
#include <math.h>
//tạo 1 hàm hoán vị
void HoanVi(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
void ViTriChanLe(int a[], int n)
{
int dem = 0;
int sochan = 0, sole = 0;
// kiểm tra xem số lượng số chẵn có bằng số lượng số lẻ ko
for (int i = 0; i < n; i++)
{
if(a[i] % 2 == 0)
{
sochan ++;
}
else
{
sole ++;
}
}
if(abs(sochan - sole) >= 2 )// nếu không bằng tức ko thể có cách hoán vị nào thỏa --> xuất ra -1
{
printf("-1");
}
else// nếu = thì xử lý
{
for (int i = 0; i < n; i ++ )//duyệt hết mảng
{
if (abs(a[i] - i) % 2 == 0)//kiểm tra nếu xuất hiện phần tử chẵn ở vị trí lẻ hoặc lẻ ở vị trí chẵn
{
for (int j = i + 1; j < n; j++)// thì duyệt từ số sau đến hết mảng
{
if (abs(a[j] - a[j]) % 2 != 0)// nếu gặp phần tử đầu tiên khác tính chẵn lẻ
{
HoanVi(a[i], a[j]);// thì hoán vị 2 phần tử đó
dem++;// tăng số lần hoán vị lên 1
printf("%4d%4d", i+1, j+1);// in ra các vị trí hoán vị (tính từ 1)
}
break; // thoát ngay không duyệt tiếp nữa
}
}
}
printf("so lan hoan vi it nhat la : %d",dem);// in ra số lần hoán vị
}
}
int main()
{
int a[6] = { 1,3,5,4,6,2 };
int n = 6;
ViTriChanLe(a, n);
_getch();
return 0;
}