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

更新于: 19-8-2019

214 浏览量

启动您的 职业

完成课程以获得认证

开始
广告