C 语言中的布尔数组难题?
这里我们将看到一个布尔数组难题。给定一个有两个元素 0 和 1 的数组。我们必须使所有元素为 0。我们应该考虑以下一些规范 −
- 在数组中一个元素为 0,它是固定的,但我们不知道该元素的位置
- 另一个元素可以是 0 或 1
- 这里只允许补运算,不能执行其他运算
- 我们不能使用分支和循环语句
- 我们不能将 0 直接分配给数组元素
我们可以通过不同的方式解决这个问题。其中有三种 −
方法 1 −
示例
#include <iostream> using namespace std; void makeZero(int arr[2]) { arr[ arr[1] ] = arr[ !arr[1] ]; } int main() { int arr[] = {1, 0}; makeZero(arr); cout<<"arr[0] = "<<arr[0]<<endl; cout<<"arr[1] = "<<arr[1]; }
输出
arr[0] = 0 arr[1] = 0
方法 2 −
示例
#include <iostream> using namespace std; void makeZero(int arr[2]) { arr[ arr[1] ] = arr[ arr[0] ]; } int main() { int arr[] = {1, 0}; makeZero(arr); cout<<"arr[0] = "<<arr[0]<<endl; cout<<"arr[1] = "<<arr[1]; }
输出
arr[0] = 0 arr[1] = 0
方法 3 −
示例
#include <iostream> using namespace std; void makeZero(int arr[2]) { arr[0] = arr[arr[0]]; arr[1] = arr[0]; } int main() { int arr[] = {1, 0}; makeZero(arr); cout<<"arr[0] = "<<arr[0]<<endl; cout<<"arr[1] = "<<arr[1]; }
输出
arr[0] = 0 arr[1] = 0
广告