Тема: Програма, яка відгадує закреслену цифру

Невеликий математичний трюк
1) Загадайте будь-яке чотирьох значне число
2) Поміняйте в ньому цифри як завгодно
3) Відніміть від більшого числа менше
4) В різниці закресліть будь-яку одну цифру
5) Введіть цифри що залишились, програма відгадає яку цифру ви закреслили
Наприклад
1) 4372
2) 2743
3) 4372 - 2743 = 1629
4) 1629
5) 129 -> 6

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    setlocale(LC_ALL, "");
    int x, arr_x[3];
    cout << "Загадайте будь-яких чотири цифри, помiняйте мiсцями цифри в будь якому порядку, вiд бiльшого числа вiднiмiть менше, в рiзницi що в вас вийде закреслiть будь яку цифру та введiть що осталось (коли ви викрислите цифру в вас має залишитись три або двi цифри їх i потрiбно ввести) я спробую вiдгадать що за цифру ви викреслили \nВведiть ->";
    cin >> x;
    for (int i = 2; i >= 0; i--, x /= 10) arr_x[i] = x % 10;
    int ind = 0;
    while ((ind + arr_x[0] + arr_x[1] + arr_x[2]) % 9 != 0)    ind++;
    ind == 0 ? cout << "На жаль я можу сказати точно що ви закреслили це 0 або 9" : cout << ind;
    getch();
    return 0;
}

Програма
https://yadi.sk/d/7k5NAuzag4sZ8

Чому так
якщо 4372 і 2743 додати по цифрах (4+3+7+2) то перше і друге число матимуть однакову суму 16, а також однакову остачу (4/9 = 0,444; 3/9 = 0,333; ...) при віднімані остача скоротиться і ми одержимо число що кратне дев'яти, тому щоб відгадати цифру яка була закреслена достатньо додавати одиницю доти доки не отримаємо суму кратну дев'яти
(1 + 2 + 9 + 0) / 9 == 1,333
...
(1 + 2 + 9 + 5) / 9 == 1,888
(1 + 2 + 9 + 6) / 9 == 2 - два кратне дев'яти тому це число було закреслене

Подякували: Chemist-i, Joker, Yola, DNS, VTrim, Q-bart6

2 Востаннє редагувалося VTrim (18.04.2015 18:47:38)

Re: Програма, яка відгадує закреслену цифру

Хотів перевірити,під рукою був тільки PHP,тому перевів на нього :)
Тримайте,можливо комусь знадобиться у себе на сайті.

<?php

    if($_POST['x']) {    

    $x = $_POST['x'];

    if (strlen($x) == 4 && ctype_digit($x)) {
   
    for ($i = 2; $i >= 0; --$i, $x /= 10) $arr_x[$i] = $x % 10;
    $ind = 0;
    while (($ind + $arr_x[0] + $arr_x[1] + $arr_x[2]) % 9) ++$ind;
    echo !$ind ? 'На жаль я можу сказати точно що ви закреслили це 0 або 9' : $ind;

    } else {

    echo 'Ви ввели не цифри, або їх кількість не дорівнює 4.<br />';

    }

}

    echo 'Загадайте будь-яких чотири цифри, помiняйте мiсцями цифри в будь якому порядку, вiд бiльшого числа вiднiмiть менше, 

в рiзницi що в вас вийде закреслiть будь яку цифру та введiть що осталось (коли ви викрислите цифру в вас має залишитись 

три або двi цифри їх i потрiбно ввести) я спробую вiдгадати, що за цифру ви викреслили. <br /> 
    Введiть ->

    <form method="POST">
    <input type="text" placeholder=" Введіть 4 цифри" name="x">
    <input type="submit" value="Запустити">';
Подякували: Betterthanyou1