Cho mảng 2 phần tử, một là 0, phần tử kia có thể 0 hoặc 1. Đưa cả 2 về 0 với ràng buộc:
- Chỉ dùng phép bổ sung (complement)
- Không dùng vòng lặp, điều kiện, gán trực tiếp
Giải pháp
#include <iostream>
using namespace std;
void makeZero(int a[2]) {
a[a[1]] = a[!a[1]];
}
int main() {
int a[] = {1, 0};
makeZero(a);
cout << "a[0] = " << a[0] << "\na[1] = " << a[1];
return 0;
}
Giải thích: Nếu a[1]=0 → a[0]=a[1]=0. Nếu a[1]=1 → a[1]=a[0]=0. Cách khác: `a[a[1]] = a[a[0]]`
Kết quả
a[0] = 0 a[1] = 0