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