📜  布尔数组难题

📅  最后修改于: 2021-04-27 18:25:10             🧑  作者: Mango

输入:两个具有值0和1的元素的数组arr []

输出:将两个元素都设为0。

规格:以下是要遵循的规格。
1)保证一个元素为0,但我们不知道其位置。
2)我们不能说另一个元素可以是0或1。
3)我们只能对数组元素进行补充,而不能进行其他操作,例如和,或,多,除,…。等等。
4)我们不能使用if,else和loop构造。
5)显然,我们不能直接将0赋给数组元素。

我们有几种方法可以做到这一点,因为我们可以确保始终存在一个零。感谢devendraiiit建议使用以下3种方法。

方法1

C++
#include 
using namespace std;
void changeToZero(int a[2]) 
{ 
    a[ a[1] ] = a[ !a[1] ]; 
} 
  
// Driver code
int main() 
{ 
    int a[] = {1, 0}; 
    changeToZero(a); 
      
    cout<<"arr[0] = "<C
void changeToZero(int a[2])
{
   a[ a[1] ] = a[ !a[1] ];
}
  
int main()
{
   int a[] = {1, 0};
   changeToZero(a);
  
   printf(" arr[0] = %d \n", a[0]);
   printf(" arr[1] = %d ", a[1]);
   getchar();
   return 0;
}


Python3
# Python3 program for a 
# boolean array puzzle
def changeToZero(a):
    a[ a[1] ] = a[ not a[1] ]
    return a
  
# Driver code 
if __name__=='__main__':
    a = [1, 0] 
    a = changeToZero(a); 
      
    print(" arr[0] = " + str(a[0])) 
    print(" arr[1] = " + str(a[1])) 
  
# This code is contributed by Yash_R


方法二

void changeToZero(int a[2])
{
    a[ !a[0] ] = a[ !a[1] ]
}

方法3
此方法甚至不需要补充。

void changeToZero(int a[2])
{
    a[ a[1] ] = a[ a[0] ]
}

方法4
感谢purvi建议这种方法。

void changeToZero(int a[2])
{
  a[0] = a[a[0]];
  a[1] = a[0];
}

可能还有更多方法。