Hoán đổi 2 mảng không dùng biến tạm (Temp). Sử dụng phép toán số học và bitwise thay vì biến thứ 3.
Logic đọc mảng đầu tiên
printf("Nhập mảng thứ nhất:\n");
for(i = 0; i < size; i++) {
scanf("%d", &first[i]);
}
Logic đọc mảng thứ hai
printf("Nhập mảng thứ hai:\n");
for(i = 0; i < size; i++) {
scanf("%d", &sec[i]);
}
Logic hoán đổi không dùng biến tạm
for(i = 0; i < size; i++) {
first[i] = first[i] + sec[i];
sec[i] = first[i] - sec[i];
first[i] = first[i] - sec[i];
}
Chương trình hoàn chỉnh
#include <stdio.h>
int main() {
int size, i, first[20], sec[20];
printf("Nhập kích thước mảng: ");
scanf("%d", &size);
printf("Nhập mảng thứ nhất:\n");
for(i = 0; i < size; i++) {
scanf("%d", &first[i]);
}
printf("Nhập mảng thứ hai:\n");
for(i = 0; i < size; i++) {
scanf("%d", &sec[i]);
}
// Hoán đổi 2 mảng
for(i = 0; i < size; i++) {
first[i] = first[i] + sec[i];
sec[i] = first[i] - sec[i];
first[i] = first[i] - sec[i];
}
printf("\nMảng đầu tiên sau hoán đổi %d phần tử:\n", size);
for(i = 0; i < size; i++) {
printf("%d\t", first[i]);
}
printf("\nMảng thứ hai sau hoán đổi %d phần tử:\n", size);
for(i = 0; i < size; i++) {
printf("%d\t", sec[i]);
}
return 0;
}
Kết quả chạy
Nhập kích thước mảng: 5
Nhập mảng thứ nhất: 11 12 13 14 15
Nhập mảng thứ hai: 90 80 70 60 50
Mảng đầu tiên sau hoán đổi 5 phần tử: 90 80 70 60 50
Mảng thứ hai sau hoán đổi 5 phần tử: 11 12 13 14 15