Фон
Итак, мы все знаем классическое доказательство, которое выглядит так:
а = Ь
a² = AB
a² - b² = AB - b²
(аb) (а + б) = Ь (аb)
(а + б) = Ь
Ь + B = B
2b = Ь
2 = 1 (Ха!)
Из Конечно, ошибка в том, что вы не можете разделить на 0. Поскольку a = b, a - b = 0, значит, было скрытое деление на 0.
Соревнование
Вы должны повторить это доказательство. Сначала объявите два целых числа a и b (неважно, как вы их называете) равными. Затем объявите aMod и bMod модифицированными версиями a и b и первоначально равными a и b соответственно. Вы должны умножить их обоих на a, а затем вычесть b * b из обоих. Затем вы должны разделить на a - b, а затем разделить их на b (или a), чтобы получить. Затем распечатайте aMod и bMod со знаком равенства между ними.
Закулисный
Конечно, поскольку вы объявили a и b равными, a - b = 0, а деление на 0 вызывает ошибку. Таким образом, вы должны творчески подделать это. Кроме того, поскольку вы пытаетесь повторить доказательство, результат всех операций на aMod и bMod не должен совпадать при печати. Они не должны равняться точно 2 и 1, просто два числа, которые не равны.
Вот пример:
#include <iostream>
#define subtract(a, b) a - b
using namespace std;
int main()
{
int a = 4, b = 4;
int a_2 = a, b_2 = b;
a_2 *= a;
b_2 *= b;
a_2 -= b * b;
b_2 -= b * b;
a_2 = a_2 / subtract(a, b);
b_2 = b_2 / subtract(-b, -a); // a - b == (-b) - (-a)
a_2 /= a;
b_2 /= a;
cout << a_2 << " = " << b_2 << " because I did the same operations on both of them.";
return 0;
}
Может быть, не самый лучший, но это иллюстрирует суть.
Бонус закулисный
Вместо того, чтобы печатать знак равенства, вы можете распечатать только две переменные (aMod и bMod), а затем иметь код, который, по-видимому, сравнивает две переменные на равенство, но на самом деле заключается в том, что они равны (и печатает некоторую форму true
).
Помните, это конкурс популярности, поэтому побеждает наибольшее количество голосов.
Кроме того, в новой версии математики под названием «Математика 2.0» используются стандартные лазейки, которые автоматически лишают законной силы доказательство.
источник
Ответы:
JavaScript
Выход:
Обратите внимание, что 0/0 = NaN
намек
источник
Python 2
Я уверен, что это очевидно, так как все знают Python, но вот моя попытка:
Это выводит
True
.Подсказка:
источник
Рубин
ideone
Подсказка:
Объяснение:
источник
GolfScript
Предупреждение: эта программа немного обманывает, потому что она не печатает aMod и bMod
Попробуй это здесь !
Так что же происходит?
источник
пролог
Вывод, когда
areEqual(4,4)
вызывается (или любая другая пара чисел на самом деле):Почему?
источник
JavaScript
Вывод:
http://jsbin.com/furino/2/edit?js,output JsBin, похоже, не в состоянии выполнить этот код. Вместо этого используйте консоль браузера.
Почему?
Еще один JavaScript: он не совсем соответствует правилам, он выводит только, если переменные равны или нет.
Почему?
источник
NaN
неNaN
соответствует спецификациям IEEE float. На самом деле, быстрый способ проверить, есть ли у васNaN
C, - это сравнить его с самим собой. Так что это относится ко всем языкам, а не только к JS.фантом
Выход:
Почему?
источник
a
равныb
в конце.С
Классическая ошибка доказательства требует классического синтаксического недопонимания. К сожалению, я встречал некоторых разработчиков «только высокого уровня», которые убеждены, что C не работает из-за результатов, подобных этому коду. Если вы знаете, как работает C, это становится довольно очевидным, но если вы увидели код и предположили, что это был другой язык, это может быть не так.
Конечно, это не работает так же хорошо, когда написано более идиоматически,
#include <stdio.h>
а int бросается перед объявлениями.источник