Условие задачи взято с сайта acmp.ru (Время: 1 сек. Память: 16 Мб Сложность: 12%):
Вы пользуетесь общественным транспортом? Вероятно, вы расплачивались за проезд и получали билет с номером. Счастливым билетом называют такой билет с шестизначным номером, где сумма первых трех цифр равна сумме последних трех. Т.е. билет с номером 385916 – счастливый, т.к. 3+8+5=9+1+6 . Вам требуется написать программу, которая проверяет счастливость билета. Входные данные В единственной строке входного файла INPUT.TXT записано одно целое число N (0 ≤ N < 10^6) . Выходные данные В выходной файл OUTPUT.TXT нужно вывести «YES», если билет с номером N счастливый и «NO» в противном случае. Примеры
№INPUT.TXTOUTPUT.TXT 1 385916 YES 2 123456 NO
Разбор решения задачи
Эту задачу можно решить различными способами. Можно, например, обрабатывать число как строку — вычислим сумму первых трех символов и сравним с суммой второй тройки. Похожий подход использовался при генерации всех счастливых билетов в разделе «Циклы» нашего учебника по С++.
Счастливый билет. Серия 8 | Мелодрама | Сериал Про Любовь
#include #include using namespace std; int main() < ifstream ifst(«input.txt»); ofstream ofst(«output.txt»); string number; ifst >> number; if (number[0] + number[1] + number[2] == number[3] + number[4] + number[5]) ofst
Это решение прекрасно работает, однако мы можем честно считать число, а затем — получить сумму его цифр с помощью функции digitsSum , описанной ранее. Однако, нам не нужна сумма всего числа — а нужна сумма его половин. Так как число шестизначное — то левая его половина будет являться результатом деления на 1000 , правая — остатком от такого деления. реализация такого подхода:
#include using namespace std; int digitsSum(int n); int main() < ifstream ifst(«input.txt»); ofstream ofst(«output.txt»); int n; ifst >> n; int lhs = n / 1000; int rhs = n % 1000; if(digitsSum(lhs) == digitsSum(rhs)) ofst
Просмотр 0 веток ответов
Источник: pro-prof.com
Программа которая определяет счастливый билет или нет
Вот сама задача:
USES CRT; VAR m1,m2,n,n1,n2,n3,n4,n5,n6,s1,s2:LongInt; BEGIN ClrScr; WriteLn(‘Vvedite nomer bileta: ‘); ReadLn(n); m1:=n div 1000; n1:=m1 div 100; n2:=m1 mod 10; n3:=(m1-n1*100-n2) div 10; s1:=n1+n2+n3; m2:=n mod 1000; n4:=m2 div 100; n5:=m2 mod 10; n6:=(m2-n4*100-n5) div 10; s2:=n4+n5+n6; if s1=s2 then WriteLn(‘Bilet schaslivyi’) else WriteLn(‘Bilet ne schaslivyi’); ReadLn END.
Здесь:
n — номер билета,
m1 и m2 — первые и последние 3 числа соответственно,
n1, n2, n3, n4, n5, n6 — 1е, 2е, 3е, 4е, 5е, 6е числа билета соответсвенно,
s1 и s2 — сумма первых и последних 3 чисел соответственно.
Помогите, пожалуйста, отредактировать эту программу, чтобы она подсчитала колличество счастливых билетов (вроде около 52 тысяч).
Как работают «счастливые билетики»? Математический лайфхак Вольфсона на QWERTY
Алгоритм нахождения суммы чисел оставить таким же! Предел от 000000 до 999999 (т.е. чтобы работало только для 6-значных чисел).
P.S. Счастливый билет — сумма первых трёх чисел равно сумме трёх последних (в задаче s1=s2).
Спасибо за ранее.
Последний раз редактировалось BzDoN; 29.12.2008 в 18:51 .
Источник: www.programmersforum.ru
Счастливый билет. Где ошибка в коде?
Не могу понять почему после проверки на количество чисел в веденном числе в блок с формулами входит а=0.
Если закоментировать часть с проверкой программа отлично работает. Помогите плиз разобрать в чем же ошибка.
- Вопрос задан 30 янв.
- 359 просмотров
5 комментариев
Простой 5 комментариев
Давайте на секунду представим, что это вам нужно найти в приведенном вами коде. Вы бы смогли это сделать?
Учусь писать на данном форуме. Не в обиду. Поправил, вроде сейчас норм
Зачем тут так много кода?
a2 = int((float(a/100000) — a1) * 10) print(a2) a3 = int((float(a/10000) — int(a/10000))*10)
Для решения задачи по билетам достаточно целочисленного деления и остатка от деления.
Две оператора.
>>> 100 // 3 33 >>> 100 % 3 1
При чем тут тэг VSC? У вас проблема с редактором кода?
Решения вопроса 1
А зачем все так сложно?
Зачем введенную строку преобразовывать в int?
Зачем выделять цифры путем деления на 10?
Зачем так сложно выяснять длину введенного числа?
Зачем столько танцев с бубнами над отдельными цифрами?
Зачем. ?
Все по сути делается в три строки:
a = input(«Введите номер вашего билета что бы узнать счастливый он или нет: «) if len(a)==6 and a.isdigit(): la=list(map(int,list(str(a)))) if sum(la[:3])==sum(la[3:]): print(‘Счастливый’) else: print(‘Обычный’) else: print(«Ввели неверное число»)
Введите номер вашего билета что бы узнать счастливый он или нет: 123456 Обычный Введите номер вашего билета что бы узнать счастливый он или нет: 222223 Обычный Введите номер вашего билета что бы узнать счастливый он или нет: 222222 Счастливый Введите номер вашего билета что бы узнать счастливый он или нет: 456375 Счастливый Введите номер вашего билета что бы узнать счастливый он или нет: 196277 Счастливый Введите номер вашего билета что бы узнать счастливый он или нет: 012345 Обычный Введите номер вашего билета что бы узнать счастливый он или нет: 000000 Счастливый Введите номер вашего билета что бы узнать счастливый он или нет: 123.456 Ввели неверное число Введите номер вашего билета что бы узнать счастливый он или нет: 123.45 Ввели неверное число Введите номер вашего билета что бы узнать счастливый он или нет: 123Ф56 Ввели неверное число
Источник: qna.habr.com