输入:两个具有值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];
}
可能还有更多方法。