Рубрики

Логическая головоломка

Ввод: массив 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] ]; 

  
// Код драйвера

int main() 

    int a[] = {1, 0}; 

    changeToZero(a); 

      

    cout<<"arr[0] = "<<a[0]<<endl; 

    cout<<" arr[1] = "<<a[1]; 

    return 0; 

  
// Этот код предоставлен rathbhupendra

С

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;

}

Способ 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];

}

Там может быть много других методов.

Пожалуйста, напишите комментарии, если вы обнаружите, что вышеприведенные коды неверны, или найдите другие способы решения той же проблемы.

Рекомендуемые посты:

Логическая головоломка

0.00 (0%) 0 votes