算法设计:如何解决布尔数组难题?

2021年3月22日15:31:38 发表评论 706 次浏览

本文概述

输入如下:两个元素的数组arr []的值为0和1

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

标准:

以下是要遵循的标准。

1)确保一个元素为0, 但我们不知道其位置。

2)我们不能说另一个元素可以是0或1。

3)我们只能对数组元素进行补充, 而不能进行其他操作, 例如和, 或, 多, 除等。等等

4)我们不能使用if, else和loop构造。

5)显然, 我们不能直接将0分配给数组元素。

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

方法1

C ++

#include <bits/stdc++.h>
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] = " <<a[0]<<endl; 
     cout<< " arr[1] = " <<a[1]; 
     return 0; 
} 
  
// This code is contributed by rathbhupendra

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

方法2

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

方法3

这种方法甚至不需要补充。

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

方法4

谢谢

普尔维

建议这种方法。

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

可能还有更多方法。

如果你发现以上代码有误, 请写评论, 或者找到其他解决相同问题的方法。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: