Очень часто, когда езжу на общественном транспорте, решаю задачку с цифрами из билета.
Сама задачка: Автобусный билет считается счастливым, если между его цифрами можно в нужных местах расставить знаки четырёх арифметических действий и скобки так, чтобы значение полученного выражения равнялось 100, необходимо поставить 5 знаков (между каждой цифрой), последовательность вычислений - любая, регламентируется скобками.
Как можно решить задачу, так чтобы при вводе числа от 000000 до 999999 получить формулу, в результате которой получается число 100 Например, есть число 123456, 100 можно получить по формуле: =1+(2+3+4)*(5+6)
Для сведения числа: 012345, 123456, 234567, 345678, 456789, 567890, 098765, 987654, 876543, 765432, 654321, 543210, 444444, 555555, 777777, 999999 имеют решения
Приветствуются любые варианты решения: формулами, макросами (с использованием Evaluate и без) или просто в уме.
1. Для начала, нужно получить решения для всех вышеперечисленных чисел, можно решить и без программирования 2. Сколько всего таких чисел в 1 млн. билетов, т.е. какова вероятность получить "счастливый" белет? 3. Какова максимальная последовательность подряд идущих "счастливых" билетов?
На 2 и 3 вопрос точно ответить нельзя без полного прорешивания всего миллиона билетов. Буду очень удивлен, если ктото даст ответ на эти вопросы менее чем через неделю, по крайне мере у меня ушло на это больше недели (правда компьютер слабенький).
Очень часто, когда езжу на общественном транспорте, решаю задачку с цифрами из билета.
Сама задачка: Автобусный билет считается счастливым, если между его цифрами можно в нужных местах расставить знаки четырёх арифметических действий и скобки так, чтобы значение полученного выражения равнялось 100, необходимо поставить 5 знаков (между каждой цифрой), последовательность вычислений - любая, регламентируется скобками.
Как можно решить задачу, так чтобы при вводе числа от 000000 до 999999 получить формулу, в результате которой получается число 100 Например, есть число 123456, 100 можно получить по формуле: =1+(2+3+4)*(5+6)
Для сведения числа: 012345, 123456, 234567, 345678, 456789, 567890, 098765, 987654, 876543, 765432, 654321, 543210, 444444, 555555, 777777, 999999 имеют решения
Приветствуются любые варианты решения: формулами, макросами (с использованием Evaluate и без) или просто в уме.
1. Для начала, нужно получить решения для всех вышеперечисленных чисел, можно решить и без программирования 2. Сколько всего таких чисел в 1 млн. билетов, т.е. какова вероятность получить "счастливый" белет? 3. Какова максимальная последовательность подряд идущих "счастливых" билетов?
На 2 и 3 вопрос точно ответить нельзя без полного прорешивания всего миллиона билетов. Буду очень удивлен, если ктото даст ответ на эти вопросы менее чем через неделю, по крайне мере у меня ушло на это больше недели (правда компьютер слабенький).MCH
Выложу те, где всего 1 вариант сложения: 456789: (4+5)*(6+7)-8-9 567890: 5+(6+7)*8-9-0 098765: 0-9+8*(7+6)+5 765432: 7*(6+5+4)-3-2 654321: (6+5)*(4+3+2)+1 777777: (7+7)*(7+7/7/7)
Миша, билеты ниже моя формула посчитала несчастливыми: 123456 234567 345678 987654 876543
Quote (MCH)
необходимо поставить 5 знаков (между каждой цифрой)
Еще может быть минус перед 1-ой цифрой. Я его не учитывал. Да, и двойные скобки тоже.
1. Решено формулами.
Выложу те, где всего 1 вариант сложения: 456789: (4+5)*(6+7)-8-9 567890: 5+(6+7)*8-9-0 098765: 0-9+8*(7+6)+5 765432: 7*(6+5+4)-3-2 654321: (6+5)*(4+3+2)+1 777777: (7+7)*(7+7/7/7)
Миша, билеты ниже моя формула посчитала несчастливыми: 123456 234567 345678 987654 876543
Quote (MCH)
необходимо поставить 5 знаков (между каждой цифрой)
Еще может быть минус перед 1-ой цифрой. Я его не учитывал. Да, и двойные скобки тоже.ZORRO2005
Сообщение отредактировал ZORRO2005 - Пятница, 06.07.2012, 22:36
Миша, билеты ниже моя формула посчитала несчастливыми: 123456
пример с числом 123456 приведен в 1 посте 234567: =2*(3+(4+5)*6-7)
Quote (ZORRO2005)
Еще может быть минус перед 1-ой цифрой
Я не использовал данный прием, т.к это не оговорено в условиях
Quote (ZORRO2005)
Да, и двойные скобки тоже
скобки могут быть одинарные, двойные, тройные, четвертные, т.к последовательность выполнения математических действий может быть любая
моя UDF возврашает не в упрощенном варианте, а со всеми вложениями скобок:: =1+(((2+3)+4)*(5+6)) =2*((3+((4+5)*6))-7) дописал функцию, возвращает в сокращенном формате: 123456: =1+(2+3+4)*(5+6) 234567: =2*(3+(4+5)*6-7)
Quote (ZORRO2005)
Миша, билеты ниже моя формула посчитала несчастливыми: 123456
пример с числом 123456 приведен в 1 посте 234567: =2*(3+(4+5)*6-7)
Quote (ZORRO2005)
Еще может быть минус перед 1-ой цифрой
Я не использовал данный прием, т.к это не оговорено в условиях
Quote (ZORRO2005)
Да, и двойные скобки тоже
скобки могут быть одинарные, двойные, тройные, четвертные, т.к последовательность выполнения математических действий может быть любая
моя UDF возврашает не в упрощенном варианте, а со всеми вложениями скобок:: =1+(((2+3)+4)*(5+6)) =2*((3+((4+5)*6))-7) дописал функцию, возвращает в сокращенном формате: 123456: =1+(2+3+4)*(5+6) 234567: =2*(3+(4+5)*6-7)MCH
Сообщение отредактировал MCH - Суббота, 07.07.2012, 14:12
Сергей, судя по сообщению у тебя есть решение? Хотелось бы узнать, как решил? формулами, мокросами, макрофункциями. И как быстро производится расчет?
PS: данную задачу решал несколько лет назад, когда на VBA не мог еще ни строчки написать Доступным для меня был тогда только QBasic, при этом не исползовал функцию Evaluate, т.к. ее там нет
Недавно реализовал решение на VBA, здесь значительно больше возможностей (Хотя с Evaluate расчет ведется в 10 раз медленнее). Кроме того, сделал расчет чисто на формулах (использовал 5! * 4^5 формул), файл получился очень тяжелым но считает быстро. А также вариант с помощью макрофункции ВЫЧЕСЛИТЬ() где нет необходимости прописывать все 122880 формул, обошелся только 120, файл при этом "весит" 20 кб, если интересно могу выложить.
Quote (ZORRO2005)
Понял, исправляюсь
Сергей, судя по сообщению у тебя есть решение? Хотелось бы узнать, как решил? формулами, мокросами, макрофункциями. И как быстро производится расчет?
PS: данную задачу решал несколько лет назад, когда на VBA не мог еще ни строчки написать Доступным для меня был тогда только QBasic, при этом не исползовал функцию Evaluate, т.к. ее там нет
Недавно реализовал решение на VBA, здесь значительно больше возможностей (Хотя с Evaluate расчет ведется в 10 раз медленнее). Кроме того, сделал расчет чисто на формулах (использовал 5! * 4^5 формул), файл получился очень тяжелым но считает быстро. А также вариант с помощью макрофункции ВЫЧЕСЛИТЬ() где нет необходимости прописывать все 122880 формул, обошелся только 120, файл при этом "весит" 20 кб, если интересно могу выложить.MCH
Сообщение отредактировал MCH - Понедельник, 09.07.2012, 11:13
Решал формулами+ВЫЧИСЛИТЬ()+фильтры Получилось 4^5*37 строк Я посчитал, что может быть 37 вариантов расстановки скобок. Если ошибся, напишите какой вариант упустил. Поправить - 2 мин.
Решал формулами+ВЫЧИСЛИТЬ()+фильтры Получилось 4^5*37 строк Я посчитал, что может быть 37 вариантов расстановки скобок. Если ошибся, напишите какой вариант упустил. Поправить - 2 мин.
Я посчитал, что может быть 37 вариантов расстановки скобок
Я посчитал что вариантов должно быть 120, исходя из количества престановок последовательности выполнения математических действий (5! = 120) Проверил на уникальность расставленные скобки - плучилось 42. Это значительно сокращает расчеты, почти в 3 раза. Файл выше перезалил
Quote (ZORRO2005)
Я посчитал, что может быть 37 вариантов расстановки скобок
Я посчитал что вариантов должно быть 120, исходя из количества престановок последовательности выполнения математических действий (5! = 120) Проверил на уникальность расставленные скобки - плучилось 42. Это значительно сокращает расчеты, почти в 3 раза. Файл выше перезалилMCH
PS: мне удолось найти 716270 таких чисел, т.е вероятность получить "счастливый" билет более 70% Даю ссылку на текстовый файл с перечислением всех чисел (в архиве 4,26 МБ)
Quote (ZORRO2005)
Решал формулами+ВЫЧИСЛИТЬ()+фильтры
Интересное решение, но не все варианты ноходит. Например число 164676 не нашло, хотя решение есть =(1-6)*((4-6)*7-6)
PS: мне удолось найти 716270 таких чисел, т.е вероятность получить "счастливый" билет более 70% Даю ссылку на текстовый файл с перечислением всех чисел (в архиве 4,26 МБ)MCH
Вариант решения для любого числа (от двухзначного до 8ми значного) С любыми действиями (+, -, *, /) В любой последовательности вычисления (приоритет действий определяется скобками) С любой "склейкой" цифр (разделение числа не только на цифры, но и на числа / группы цифр) Можно искать не только 100, но и любое другое число
Решение в Excel на VBA, без Evaluate Для 8ми значных чисел решается за приемлемое время, девятизначные уже долго перебирает
PS: Почти 10 лет прошло
Вариант решения для любого числа (от двухзначного до 8ми значного) С любыми действиями (+, -, *, /) В любой последовательности вычисления (приоритет действий определяется скобками) С любой "склейкой" цифр (разделение числа не только на цифры, но и на числа / группы цифр) Можно искать не только 100, но и любое другое число
Решение в Excel на VBA, без Evaluate Для 8ми значных чисел решается за приемлемое время, девятизначные уже долго перебирает