|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.12.2008, 14:56 | #1 |
Новичок
Джуниор
Регистрация: 05.12.2008
Сообщений: 2
|
Задача С++ Определение "счастливого" билета
Выбирая билеты мне понравился вопрос.
Когда дело дошло до реализации немного пожалел об этом) Вообщем сам вопрос звучит так:" Определите я вляется ли Ваш трамвайный билет счастливым?" Я привел для себя некоторые константы: 1 в билете не более и не менее 6 цифр; 2 наименьшее значение билета 001001 серия и номер соответственно. дальше получился вот такой код: #include <iostream> //библиотека дя работы с потоками ввода вывода using namespace std;// библиотека, iostream без .h void proverka(long); //описание(прототип) до опредиления функции int main(void) //главная функция { long nomer = 0;// Определение переменной с присваиванием значения cout<<"Введите номер билета \n"; // Диалог пользователя cout выходной cin входной cin>>nomer;// ввод переменной nomer с клавиатуры if(nomer==0) // логическая проверка cout<<"\nНекоректный ввод числа, введите 6 цифр(x_x)!!!"; //вывод ошибки if(nomer>999999) // логическая проверка cout<<"\nНекоректный ввод числа, введите 6 цифр(x_x)!!!"; //вывод ошибки if(nomer<=999999) // логическая проверка proverka(nomer);// вызов функции proverka cout<<'\n';// переходод на новую строку } //завершение программы void proverka(long n) //опредиление функции proverka { // открытие блока функции int ost = 0, x = 0, y = 0; // определение с присваиванием long dec=100000;// определение с присваиванием for (int i=0;i<6;i++) //цикл с определением переменной { //раскрываем цикл ost=n%dec;// производим деление с остатком переменных и присваивание переменной ost n-=ost;// отделение остатка от n с присваиванием n/=dec; //деление с присваиванием n для определения целого значения if(i<3)x+=n;// проверка i для суммированиия первых трез цифр else y+=n;// суммирование последних трех цифр n=ost; // присваиванивание меняем значение n для новой обработки циклом dec/=10; //меняем значение dec для цикла } //закрываем цикл if(x==0||y==0)// логическая проверка cout<<"\nсерия или номер не могут быть равны нулю, некоректный ввод (x_x)!!!";//вывод ошибки if(x!=0 && y!=0)// логическая проверка cout<<"\nx="<<x&& // вывод значения cout<<"\ny="<<y&& //вывод значения x==y?cout<<"\nБилет счастливый (O_o) "<<x<<'='<<y:cout<<"\nБилет не счастливый (^_^) "<<x<<"<>"<<y; // вывод } // закрытие функции Вопрос заключается в том чтобы отладить его, тоесть вставить проверки При введении меньшего или большего чем 6 количества символов должна выводится ошибка При вводе букв или цифр переменная равна 0 так что проверка на ввод букв я думаю не требутся. вот в принципе и все. Если что нужно разьяснить из кода пишите. Буду всем благодарен кто поможет. |
05.12.2008, 16:03 | #2 |
Форумчанин
Регистрация: 11.06.2007
Сообщений: 233
|
Советую сделать так:
Используйте массив из 6 елементов к примеру с названием bil 1..6 За тем введите 6 чисел (Ввод массива я думаю вам известен) Потом Если сумма bil[1]+bil[2]+bil[3] == bil[4]+bil[5]+bil[6] То принтф что ваш билет счасливый в ином случае "Вам не повезло" Зачем Вы себе усложняете задачю которая решаетса за 3 мин? |
05.12.2008, 17:47 | #3 |
Новичок
Джуниор
Регистрация: 05.12.2008
Сообщений: 2
|
Спасибо!
Вечером как домой приду попробую код выложу. Но если все таки кто нибудь заинтересуется буду рад! |
22.06.2009, 13:53 | #4 |
Форумчанин
Регистрация: 01.03.2009
Сообщений: 100
|
Помогите сделать под Делфи!
|
18.11.2009, 12:40 | #5 |
Новичок
Джуниор
Регистрация: 18.11.2009
Сообщений: 2
|
Извиняюсь за некропостерство
Нужна программа подсчета количества счастливых билетов. Чтобы было одним циклом и без ввода данных. Можно и через массив.
Код:
6 вложенных циклов тоже не подходит. Также прпеод сказал, что хочет видеть ОДИН цикл, за который все считается. Сказал, что в журнале "Квант" это рассказывалось. Алгоритм, в частности. http://ega-math.narod.ru/Quant/Tickets.htm Вот те самые статьи, но я так и не смог это преобразить в код.. Надеюсь на вашу помощь P.S. Правильный ответ 55251 Последний раз редактировалось _pw; 18.11.2009 в 13:25. |
18.11.2009, 13:56 | #6 |
Пользователь
Регистрация: 16.11.2009
Сообщений: 24
|
Есть один вариантик решения без использования %
Код:
Если такой вариант интересный объясню откуда оно берется. (Суммируется количество счастливых билетов, сумма цифр которых =i) P.S. правильный ответ 55252 :Р |
14.12.2009, 15:23 | #7 | |
Новичок
Джуниор
Регистрация: 18.11.2009
Сообщений: 2
|
Цитата:
|
|
14.12.2009, 19:02 | #8 |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
Вобщем так - будем считать что у нас массив из 6-ти чисел, тогда
int mas[6]; int s=0; for(int i=0;i<6;i++) if (i<3) s+=mas[i]; else s-=mas[i]; if (s==0) cout <<"Lucky"<<endl; else cout <<"UnLucky"<<endl; КОд проще ваших
Если я помог вам - порадуйте меня, нажмите на весы слева
|
14.12.2009, 19:35 | #9 | |
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
Цитата:
Решение. (Сообщено одним из участников олимпиады; к сожалению, не могу указать фамилию, так как работы проверялись зашифрованными.) Рассмотрим более общую задачу: найти число последовательностей, где разница между суммой первых n цифр и суммой последних n цифр равна k (k = -9n,..., 9n). Пусть T(n, k) - число таких последовательностей. Разобьем множество таких последовательностей на классы в зависимости от разницы между первой и последней цифрами. Если эта разница равна t, то разница между суммами групп из оставшихся n-1 цифр равна k-t. Учитывая, что пар цифр с разностью t бывает 10 - (модуль t), получаем формулу T(n,k) = сумма по t от -9 до 9 чисел (10-|t|) * T(n-1, k-t). (Некоторые слагаемые могут отсутствовать, так как k-t может быть слишком велико.) |
|
14.12.2009, 19:45 | #10 |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
Молодец Алекс, я невнимателньо прочитал, там же без входных данных
А я думал есть билет,и надо проверить его на предмет "счастливости"
Если я помог вам - порадуйте меня, нажмите на весы слева
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder | AleksP | C++ Builder | 7 | 11.04.2009 13:06 |
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует | skobets | Общие вопросы C/C++ | 2 | 03.06.2008 06:51 |
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) | Dorvir | Microsoft Office Excel | 2 | 28.03.2008 10:03 |
"Транспортная задача", "Поиск решения" | Perroman | Microsoft Office Excel | 3 | 12.12.2007 17:12 |
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" | MAcK | Компоненты Delphi | 11 | 24.10.2007 10:49 |