С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
16 / 12 / 4
Регистрация: 10.09.2018
Сообщений: 373

Переставить цифры в числах a и b, чтобы в сумме получилось c

22.11.2018, 19:37. Показов 4428. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте не могу понять как задать условие. Вот условие задания. Нужно заданы три числа: a, b, c. Необходимо выяснить, можно ли так переставить цифры в числах a и b, чтобы в сумме получилось c.
Вот мой код. Если можете, сделайте используя рекурсию.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static int Num(int a, int b,int c)
        {
            Num(123, 321, 431);
            int[] mas1 = new int[3];
            int[] mas2 = new int[3];
 
            if(c == a + b)
            {
 
            }
            else
            {
                Console.WriteLine("Такое не возможно");
            }
 
            return 0;
        }
static void Main(string[] args)
        {
 
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2018, 19:37
Ответы с готовыми решениями:

Можно ли переставить цифры в числах a и b, чтобы в сумме получилось c?
Всем привет! Ребят, помогите пожалуйста с задачей, срочно надо!!! Вот условие: Заданы три числа: a, b, c. Необходимо выяснить, можно ли...

Заданы три числа.Необходимо выяснить,можно ли так переставить цифры в 1 и 2 числе,что бы в сумме получилось 3
вводимые числа: 12 31 25 выводимые числа: YES 12 13.

Переставить цифры местами так, чтобы получилось большее число
Дано число. Если можно переставить его цифры так, чтобы получилось большее число, выведите YES, в противном случае выведите NO....

6
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11242 / 2887
Регистрация: 21.04.2018
Сообщений: 33,050
Записей в блоге: 2
22.11.2018, 20:00
Цитата Сообщение от DragonBorn88 Посмотреть сообщение
Здравствуйте не могу понять как задать условие. Вот условие задания. Нужно заданы три числа: a, b, c. Необходимо выяснить, можно ли так переставить цифры в числах a и b, чтобы в сумме получилось c.
Вот мой код. Если можете, сделайте используя рекурсию.
Вы откуда такие задания берёте? У Вас вызывает затруднения простой цикл, вывод элементов массива на консоль и т.п.
А тут здание на комбинаторику! Явно не по Вашим знаниям.
0
16 / 12 / 4
Регистрация: 10.09.2018
Сообщений: 373
22.11.2018, 20:05  [ТС]
Если честно, то я учусь в универе, и нам здесь даю дедлайны жесткие. За два дня сделать 25, 70 заданий по типу таких. Те что понимаю, делаю сам. А что нет, прошу помощи. Потому что если разбирать каждое задание самостоятельно, на это уйдёт слишком много времени и я не успею сделать остальные задания.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
22.11.2018, 20:30
На правильность не претендую, сдавать не советую.
Изучение и использование могут иметь непредсказуемые последствия.

Кликните здесь для просмотра всего текста
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 301;
            int b = 917;
            int c = 300;
 
            Console.WriteLine($"{a} {b} {c}");
 
            var (can, permA, permB) = Check(a, b, c);
 
            if (can)
                Console.WriteLine($"{can} {permA} + {permB} = {c}");
            else
                Console.WriteLine($"{can}");
 
            Console.ReadKey(true);
        }
 
        static (bool result, int? permA, int? permB) Check(int a, int b, int c)
        {
            foreach (var permA in a.GetDigits().GetPermutations())
            {
                foreach (var permB in b.GetDigits().GetPermutations())
                {
                    int pa = permA.MakeValue();
                    int pb = permB.MakeValue();
 
                    if (pa + pb == c)
                        return (true, pa, pb);
                }
            }
 
            return (false, null, null);
        }              
    }
 
    static class UtilsAndExts
    {
        public static IEnumerable<IEnumerable<T>> GetPermutations<T>(this IEnumerable<T> values)
        {
            if (values.Count() == 1)
                return new[] { values };
 
            return values.SelectMany(v => GetPermutations(values.Where(x => !x.Equals(v))), (v, p) => p.Prepend(v));
        }
 
        public static int MakeValue(this IEnumerable<int> digits)
        {
            int value = 0;
 
            int multiplier = 1;
 
            foreach (int digit in digits)
            {
                if (digit / 10 != 0)
                    throw new Exception("Not a digit...");
                
                value += digit * multiplier;               
 
                multiplier *= 10;
            }
 
            return value;
        }
 
        public static IEnumerable<int> GetDigits(this int value)
        {
            value = value < 0 ? -value : value;
 
            do
            {
                yield return value % 10;
                value /= 10;
            }
            while (value != 0);
        }
    }
}
0
16 / 12 / 4
Регистрация: 10.09.2018
Сообщений: 373
22.11.2018, 20:44  [ТС]
Упростить код никак нельзя?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11242 / 2887
Регистрация: 21.04.2018
Сообщений: 33,050
Записей в блоге: 2
22.11.2018, 20:46
Цитата Сообщение от Woldemar89 Посмотреть сообщение
На правильность не претендую, сдавать не советую.
Изучение и использование могут иметь непредсказуемые последствия.
Здесь в соседней теме этот же TC сетовал, что два цикла это слишком сложно....

Добавлено через 32 секунды
Пока печатал - он сам за это написал....
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
22.11.2018, 21:56
Лучший ответ Сообщение было отмечено DragonBorn88 как решение

Решение

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Здесь в соседней теме этот же TC сетовал, что два цикла это слишком сложно....
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Пока печатал - он сам за это написал....
Хах, ну да, и тут еще рекурсия с комбинаторикой
Цитата Сообщение от DragonBorn88 Посмотреть сообщение
Упростить код никак нельзя?
Именно код или алгоритм?
Что значит упростить? Сократить или сделать более читабельным?
Из названий и сигнатур методов все понятно что они делают, можете переписать их на свой вкус.
Кстати метод возвращающий перестановки чет плохо отрабатывал...
Так вроде норм.
Кликните здесь для просмотра всего текста
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var a = 00405340;                       
            var b = 020;
            var c = 00450360;
 
            Console.WriteLine($"{a} {b} {c}");
 
            Console.WriteLine($"Test split/make...");
 
            a = a.GetDigits().MakeValue();
            b = b.GetDigits().MakeValue();
 
            Console.WriteLine($"{a} {b} {c}");
 
            Console.WriteLine($"Checking...");
 
            var (can, permA, permB) = Check(a, b, c);
 
            if (can)
                Console.WriteLine($"{can} {permA} + {permB} = {c}");
            else
                Console.WriteLine($"{can}");
 
            Console.ReadKey(true);
        }
 
        static (bool result, int? permA, int? permB) Check(int a, int b, int c)
        {
            var ad = a.GetDigits().ToArray();
            var bd = b.GetDigits().ToArray();
 
            foreach (var permA in a.GetDigits().Permutations())
            {
                foreach (var permB in b.GetDigits().Permutations())
                {
                    int pa = permA.MakeValue();
                    int pb = permB.MakeValue();
 
                    if (pa + pb == c)
                        return (true, pa, pb);
                }
            }
 
            return (false, null, null);
        }              
    }
    
    static class UtilsAndExts
    {
        public static IEnumerable<IEnumerable<T>> Permutations<T>(this IEnumerable<T> set, IEnumerable<T> subset = null)
        {
            if (subset == null)
                subset = new T[] { };
 
            if (!set.Any())
                yield return subset;
 
            for (int i = 0; i < set.Count(); i++)
            {
                IEnumerable<T> newSubset = set.Take(i).Concat(set.Skip(i + 1));
 
                foreach (IEnumerable<T> permutation in Permutations(newSubset, subset.Concat(set.Skip(i).Take(1))))
                {
                    yield return permutation;
                }
            }
        }
 
        public static int MakeValue(this IEnumerable<int> digits)
        {
            int value = 0;
 
            int multiplier = 1;
 
            foreach (int digit in digits)
            {
                if (digit / 10 != 0)
                    throw new Exception("Not a digit...");
                
                value += digit * multiplier;               
 
                multiplier *= 10;
            }
 
            return value;
        }
 
        public static IEnumerable<int> GetDigits(this int value)
        {
            value = value < 0 ? -value : value;
 
            do
            {
                yield return value % 10;
                value /= 10;
            }
            while (value != 0);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2018, 21:56
Помогаю со студенческими работами здесь

Переставить местами цифры числа так, чтобы получилось максимальное число.
дано натуральное число N. Переставить местами его цифры так, чтобы получилось максимальное число, записанное теми же цифрами.

Переставить цифры числа так, чтобы получилось максимальное возможное число
Дано число N. Требуется переставить его цифры местами таким образом, чтобы получившееся число было максимально возможным. ( нужно...

Переставить цифры числа так, чтобы получилось минимальное возможное число
Дано натуральное число n. Необходимо переставить его цифры таким образом, чтобы получилось минимальное возможное число без ведущих нулей.

Найти все способы его разделения на цифры 1 и 2, чтобы в сумме получилось то самое число.
Приведу сразу пример, что бы было понятнее. Дано натурально число, найти все способы его разделения на цифры 1 и 2, что бы в сумме...

Переставить цифры числа, чтобы получилось число больше начального, но минимальное из возможных
Есть число , в нем переставляют цифры т.к что бы получилось число большее начального , но минимальное из возможных. Найти это число.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru