Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович

Комбинаторика / Комбинаторика. Счастливые билеты N

  • На этом уроке мы рассмотрим
    два основных способа решения комбинаторных задач:
    Первый способ - когда известно количество объектов - вложенные циклы.
    Второй способ - любое количество объектов - использование рекурсии.

    Задание:
    Решить задачу «Счастливые билеты N».
    Скачать книжку для чтения по комбинаторике:
    Как решать комбинаторные задачи.
  • Дата отправки отчёта: 3 января 2016 г.
  • Задание выполнено: за 2 час. 00 мин.
  • Чему научился: Закрепил  знания по рекурсии и вспомнил комбинаторику.
  • Что было сложным: Догадаться до оптимизации.
  • Комментарии: Я сделал 4 функции после каждого способа: EasyTicket() - самый простой способ перебора, Next() - первая рекурсия, NextMode() - вторая рекурсия, где последняя цифра считается по-другому и NextMode2(), где уже смотрим, куда добавляем посл. цифру. Кода много, но лучше запомнится ;)
  • Архив проекта: Ссылка доступна после самостоятельного выполнения этого урока
  • Оценка видео-уроку:
Отчёт от 6925 за Комбинаторика / Комбинаторика. Счастливые билеты N




Оцени работу

 
Сохранить страницу:

2146. Иван
Иван
ответить
→  Артём  # Комбинаторика / Комбинаторика. Счастливые билеты N / 2016-01-04 18:35

Здорово все проработал!


7276. Ильшат
Ильшат
ответить
→  Артём  # Комбинаторика / Комбинаторика. Счастливые билеты N / 2016-01-04 02:12

Артем, пробелы выставил, а выравнивание слева забыл) Да, педант, но думаю Евгений Витольдович обратит внимание)


24. Оля
Оля
ответить
→  Артём  # Комбинаторика / Комбинаторика. Счастливые билеты N / 2016-01-04 00:27

Артем, я рада что ты отлично подружился с рекурсией, Молодец! :)


  • Отчёт оценивали:
    6987MichGar+1   3747Сергей+1   8005Александр+1   6203Николай (nick27m)+1   24Оля+1   6458Илья+1   459Сергей Сергеевич+1   7276Ильшат+1   8520Сергей Колупаев0   6452Кирилл Шмойлов+1   4992Николай+1   1Евгений Волосатов+1   7645Александр Львович+1   3664данила+1   5232Игорь+1   6484Вячеслав+1   5263Павел+1   8275Tekashnik+1   2639Морозов Юрий Александрович+1   371Kristian0   5649Максим Лапшинов+1   2146Иван+1  

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: Работе с массивами, решил задачу в общем виде.
Трудности: Решить математически. Здесь уже не рекурсия, иначе программа будет работать очень долго.
Всё-таки, решил сделать программу, решающую задачу для довольно больших N. class Program { static void Main(string[] args) { long[] sum, sum2; long S = 0; int N; N = int.Parse(Console.ReadLine()); sum = new long[9 * N + 1]; sum2 = new long[9 * N + 1]; for (int i = 0; i <= 9*N; ++i) sum[i] = 0; for (int i = 0; i <= 9; ++i) { sum[i] = 1; sum2[i] = 1; } if (N > 1) for (int k = 2; k <= N; ++k) { for (int i = 0; i <= 9 * k; ++i) { switch (i) { case 0: sum[i] = 1; break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: sum[i] += sum[i - 1]; break; case 10: sum[i] += sum[i - 1] - sum[i - 10]; break; default: sum[i] += sum[i - 1] - sum2[i - 10]; break; } Console.Write("{0,2:D}, ", sum[i]); } sum.CopyTo(sum2, 0); Console.WriteLine(); Console.WriteLine(); } for (int i = 0; i <= 9 * N; ++i) S += sum[i] * sum[i]; Console.WriteLine(S); Console.ReadKey(); //for (int a = 0; a < 10; ++a) // for (int b = 0; b < 10; ++b) // for (int c = 0; c < 10; ++c) // for (int d = 0; d < 10; ++d) // for (int e = 0; e < 10; ++e) // for (int f = 0; f < 10; ++f) // if (a + b + c == d + e + f) // console.writeline("{0} {1} {2} {3} {4} {5}", a, b, c, d, e, f); } }
Всё классно! Видимо для Витольдовича комбинаторика любимая тема. :) Что мне очень нравится есть много материала для домашнего изучения.