0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 19
1

Написать программу определения количества шестизначных счастливых билетов

10.04.2015, 23:29. Показов 6898. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
4. Написать программу определения количества шестизначных “счастливых”' билетов, у которых сумма первых 3 десятичных цифр равна сумме 3 последних десятичных цифр.

Я решил задачу с помощью цикла. Как решить с помощью механизма рекурсии (ещё один метод) ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 static int HappyTicketsCycle ()
 
        {
            int a, a1, a2, a3, a4, a5;
            byte count = 0;
 
            for (a = 0; a <= 9; a++)
                for (a1 = 0; a1 <= 9; a1++)
                    for (a2 = 0; a2 <= 9; a2++)
                        for (a3 = 0; a3 <= 9; a3++)
                            for (a4 = 0; a4 <= 9; a4++)
                            {
                                a5 = (a + a1 + a2) - (a3 + a4);
 
                                if (a5 >= 0 && a5 <= 9)
                                    count += 1;
 
                            }
 
            return count;
        }
 
          
        
 
 
        static void Main(string[] args)
        {
            Console.WriteLine("Количество счастливых билетов: {0} ", HappyTicketsCycle()); //цикл
            HappyTicketsCycle();
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2015, 23:29
Ответы с готовыми решениями:

Написать программу определения количества шестизначных счастливых билетов
Написать программу определения количества шестизначных “счастливых”' билетов, у которых сумма...

Составить процедуру для определения всех «счастливых» билетов
Назовем билет «счастливым», если в его 2N-значном номере сумма первых N цифр равна сумме следующих...

Определение количества шестизначных счастливых билетов, у которых сумма первых 3 цифр равна сумме 3 последних
Помогите, пожалуйста, написать программу в MathLab. Само задание звучит так: Напишите программу...

Алгоритм для определения количества счастливых билетов
Скласти алгоритм визначення кількості 2N-значних &quot;щасливих&quot; квитків, у яких сума перших N цифр...

10
Заблокирован
11.04.2015, 10:36 2
а не маловато счастливчиков?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        static void Main(string[] args)
        {
            int count = 0;
            Console.BufferHeight = 4600;
            for (int n = 100001; n < 1000000; n++)
            {
                string s = n.ToString();
                if (s[0] + s[1] + s[2] == s[3] + s[4] + s[5])
                {
                    Console.Write(s + " ");
                    count++;
                    if (count % 11 == 0) Console.WriteLine();
                }
            }
            Console.WriteLine("\ncount={0}", count);
            Console.ReadKey(true);
        }
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
11.04.2015, 19:17 3
Цитата Сообщение от MansMI Посмотреть сообщение
а не маловато счастливчиков?
к вам такой же вопрос
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
11.04.2015, 21:31 4
Предложу свой вариант. Не рекурсия, но тоже ничего ))
C#
1
2
3
4
5
6
            Func<int, bool> isHappy = (int num) =>
                {
                    var digits = num.ToString("000000").Select(c => Int32.Parse(c.ToString()));
                    return (digits.Take(3).Sum() - digits.Skip(3).Sum()) == 0;
                };
            Console.WriteLine( (from int n in Enumerable.Range(0, 1000000) where isHappy(n) select n).Count());
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
12.04.2015, 18:57 5
MansMI, diadiavova, Зачем тут вообще строки?

kotd, Рекурсивный вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
               public static void Main(string[] args)
        {
            int res = LuckyTicket(999999);
        }
 
        private static int LuckyTicket(int n)
        {
            if (n < 0) return 0;
            // Первые 3 цирфы
            int firstPart = n / 1000;
            // Вторые 3 цифры
            int secondPart = n % 1000;
 
            int fS = DigitsSum(firstPart);
            int sS = DigitsSum(secondPart);
 
            if (fS == sS) return 1 + LuckyTicket(n - 1);
            else return 0 + LuckyTicket(n - 1);
        }
 
 
        private static int DigitsSum(int n)
        {
            int ones = n % 10; // Единицы
            int tens = (n % 100) / 10; // Десятки
            int hundrens = n / 100; // Сотни
 
            return ones + tens + hundrens;
        }
Итеративный
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
                public static void Main(string[] args)
        {
            int res = LuckyTicket(999999);
        }
 
        private static int LuckyTicket(int n)
        {
            int count = 0;
            for (int i = 0; i < n; n++)
            {
                // Первые 3 цирфы
                int firstPart = i / 1000;
                // Вторые 3 цифры
                int secondPart = i % 1000;
 
                int fS = DigitsSum(firstPart);
                int sS = DigitsSum(secondPart);
 
                if (fS == sS) count++;
            }
 
            return count;
        }
 
 
        private static int DigitsSum(int n)
        {
            int ones = n % 10; // Единицы
            int tens = (n % 100) / 10; // Десятки
            int hundrens = n / 100; // Сотни
 
            return ones + tens + hundrens;
        }
0
Заблокирован
12.04.2015, 19:08 6
с рекурсией
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        static void Main(string[] args)
        {
            int count = 0;
            
            Console.BufferHeight = 5030;//если выводить номера
            SetChar(new char[6], 0, ref count);
            Console.WriteLine("\ncount={0}", count);
            Console.ReadKey(true);
        }
 
        static void SetChar(char[] s, int n, ref int count)
        {
            for (char ch = '0'; ch <= '9'; ch++)
            {
                s[n] = ch;
                if (n < 5) SetChar(s, n + 1, ref count);
                else
                    if (s[0] + s[1] + s[2] == s[3] + s[4] + s[5])
                    {
                        count++;
                        //если выводить номера
                        Console.Write(new string(s) + " ");
                        if (count % 11 == 0) Console.WriteLine();
                    }
            }
               
        }
0
6219 / 2467 / 725
Регистрация: 11.04.2015
Сообщений: 3,986
Записей в блоге: 43
12.04.2015, 19:13 7
Цитата Сообщение от XRoy Посмотреть сообщение
diadiavova, Зачем тут вообще строки?
Да собственно для наглядности. Я прекрасно понимаю, что с точки зрения той же производительности такой вариант не катит. Но так ли важна производительность в данном случае? Функция одноразовая и если будет сэкономлена секунда на вычисление, то что это даст? Ну вот такой вариант реализации IsHappy по производительности гораздо лучше
C#
1
2
3
4
5
6
7
8
9
10
        static bool IsHappy(int num)
        {
            int[] digits = new int[6];
            int divresult = num;
            for (int i = 0; i < 6; i++)
            {
                divresult = Math.DivRem(divresult, 10, out digits[i]);                
            }
            return (digits[0] + digits[1] + digits[2]) == (digits[3] + digits[4] + digits[5]);
        }
Но в наглядности он явно теряет. В первоначальном варианте хорошо видно, что число превращается в коллекцию цифр, которая превращается в коллекцию чисел и в конце концов сумма первых трех сравнивается с суммой последних трех. А что делается здесь - вообще без ста грамм не разберешься.

Добавлено через 1 минуту
И, кстати, вместо
C#
1
from int n in Enumerable.Range(0, 1000000) where isHappy(n) select n).Count()
Можно написать
C#
1
Enumerable.Range(0, 1000000).Count(IsHappy)
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 19
12.04.2015, 21:46  [ТС] 8
Спасибо) Вы тут ребята понаписывали, того что мы и не изучали даже Будем разбираться
0
Заблокирован
12.04.2015, 21:53 9
так обычно и бывает, один *** вопрос задаст, что и 10 мудрецов не разберутся
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 19
14.04.2015, 00:03  [ТС] 10
Кстати, маловато у меня было билетов, ибо не хватало { } . Щас переписал внимательно, столько же сколько у вас) 55252 ) Так что даже мой простой способ проканал , мудрецы) А вот с рекурсией надо разобраться

Добавлено через 6 минут
Хотя какие скобки. Там у count был тип byte . Вот в чём дело

Добавлено через 2 часа 27 минут
Process is terminated due to StackOverFlowException
0
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
14.04.2015, 10:00 11
Цитата Сообщение от kotd Посмотреть сообщение
Написать программу определения количества шестизначных “счастливых”' билетов, у которых сумма первых 3 десятичных цифр равна сумме 3 последних десятичных цифр.
Это число — константа, нет?
0
14.04.2015, 10:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2015, 10:00
Помогаю со студенческими работами здесь

Блок-схема прораммы определения количества счастливых билетов
Пожалуйста помогите правильно составить или укажите ссылку на блок-схему программы определяющей...

Написать программу определения количества 2*N -значных билетов
Написать программу определения количества 2*N -значных билетов, у которых сумма первых N десятичных...

Найти количество всевозможных шестизначных счастливых билетов
Найти количество всевозможных шестизначных счастливых билетов (для простого алгоритма потребуется...

Сколько существует счастливых шестизначных билетов от 000000 до 999999
сколько существует счастливых шестизначных билетов от 000000 до 999999??заранее спасибо))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru