Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 09.03.2024
Сообщений: 7

Вывести в консоль все возможные варианты представления исходного числа в виде a*b+c

27.03.2024, 03:11. Показов 3272. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача на методы и коллекции

На калькуляторе остались только кнопки: "2", "3", "7", "+" и "*". Напишите метод для программы, которая выводит в консоль все возможные варианты представления исходного числа в виде a*b+c, используя для такой записи только имеющиеся на калькуляторе символы. Варианты в консоль необходимо выводить в порядке возрастания первого множителя (a). Если в нескольких вариантах первые множители равны, то выводите их в порядке возрастания второго (b). Варианты с перестановкой множителей местами выводить в консоль не нужно.

Понимаю, что сначала надо просто выбрать нужные числа от вводимого числа до имеющегося и добавить в коллекцию, но не очень понимаю, ка это сделать. Помогите, пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2024, 03:11
Ответы с готовыми решениями:

Вывести все возможные представления числа N в виде произведений целых положительных чисел
Вводится целое положительное число N (N⩽100).Вывести все возможные представления числа N в виде произведений целых положительных чисел...

Вывести все возможные представления натурального числа N в виде суммы других натуральных чисел
Написать программу, выводящую все возможные представления натурального числа N в виде суммы других натуральных чисел. Сравните...

Вывести все возможные представления натурального числа N в виде суммы других натуральных чисел
Нужно создать рекурсивную процедуру, печатающую все возможные представления натурального числа N в виде суммы других натуральных чисел. Я...

32
0 / 0 / 0
Регистрация: 09.03.2024
Сообщений: 7
27.03.2024, 14:12  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
какого числа? число 51 каким образом относится к этим цифрам?
Число вводится с клавиатуры. Как относится - не знаю, надо для этого программу написать.

Добавлено через 3 минуты
Цитата Сообщение от wizard41 Посмотреть сообщение
Т.е. дается (вводится) некоторое число Х, которое может/не может быть представлено имеющимися числами и действиями на калькуляторе. Там не говорится что надо просто перебрать эти комбинации.
Все верно. В этом и сложность. Решить задачу только с числами 2, 3 и 7 я могла бы и сама.
Но результат может быть, например, такой:
26478 = 33 * 732 + 2322
26478 = 37 * 73 + 23777
26478 = 72 * 323 + 3222

Т.е, чтобы выбрать все числа до заданного пользователем, надо перебрать их все на предмет, состоят ли они из 2, 3 и 7 и нужные добавить в коллекцию. А потом уже ими оперировать.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
27.03.2024, 14:38
Lleyna, если это задание изначально было действительно на изучение коллекций и методы работы с ними, то задача подобрана крайне неудачно. Поскольку основная, я бы сказал - львиная доля алгоритма будет содержать поиск той самой тройки чисел a,b,и c, которые подходят под условие алгебраически. Роль самих коллекций тут очень минимальна.
Вариант же с простым перебором каждого из члена формулы a*b+c, при поиске подходящей суммы, экспоненциально увеличит время работы программы с каждым увеличением разряда числа, заданного пользователем.
Таким образом, это задача, скорее математическая, чем на работу с коллекциями.
0
 Аватар для zhunshun
768 / 496 / 216
Регистрация: 05.04.2015
Сообщений: 2,080
27.03.2024, 15:09
Получается бац-бац и мимо
0
1168 / 886 / 517
Регистрация: 09.04.2014
Сообщений: 2,103
27.03.2024, 15:09
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Потому что это даст слишком большое количество вариантов.
Это если искать не то, что просят в задании, как правильно подметил
Цитата Сообщение от wizard41 Посмотреть сообщение
Т.е. дается (вводится) некоторое число Х, которое может/не может быть представлено имеющимися числами и действиями на калькуляторе. Там не говорится что надо просто перебрать эти комбинации.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
27.03.2024, 15:52
задача сводится к поиску массива чисел состоящих исключительно из необходимых (тройки, семерки, туздвойки) в диапазоне от 0 до N (исходное число) и последующему перебору этого массива с подстановкой в выражение (ну или использовать что-то более оптимальное)... чисел на самом деле не очень много, скажем в диапазоне от 0 до 1000000, таких чисел 1092.
Однако тут надо учитывать проблему поиска на больших числах, т.к. предел не указан, а бесконечность - слишком большое число.
0
0 / 0 / 0
Регистрация: 09.03.2024
Сообщений: 7
27.03.2024, 15:53  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Lleyna, если это задание изначально было действительно на изучение коллекций и методы работы с ними, то задача подобрана крайне неудачно. Поскольку основная, я бы сказал - львиная доля алгоритма будет содержать поиск той самой тройки чисел a,b,и c, которые подходят под условие алгебраически. Роль самих коллекций тут очень минимальна.
Вариант же с простым перебором каждого из члена формулы a*b+c, при поиске подходящей суммы, экспоненциально увеличит время работы программы с каждым увеличением разряда числа, заданного пользователем.
Таким образом, это задача, скорее математическая, чем на работу с коллекциями.
Возможно, но это задачка из курса, ее придумала не я. Я как раз не могу ее решить.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
27.03.2024, 15:57
Цитата Сообщение от Lleyna Посмотреть сообщение
выбрать нужные числа от вводимого числа до имеющегося и добавить в коллекцию, но не очень понимаю, ка это сделать.
Это самое простое... изменить тип на строку, посимвольно проверить на принадлежность ко множеству "237"... ну, или разобрать число поразрядно на цифры и также проверить...
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
27.03.2024, 16:12
Lleyna, можете начать с этого. реализация алгоритма, предложенного YuS_2, докрутите сюда вариант, предложенный выше, и вроде готово
C#
1
2
3
4
5
6
7
List<int> digits = new List<int> { 2, 3, 7 };
int inputNumber = 511;
IEnumerable<int> data = Enumerable.Range(digits.Min(), inputNumber).Where(w => w.ToString().Select(c => int.Parse(c.ToString())).ToList().All(a => digits.Contains(a)));
foreach(int number in data)
{
    Console.WriteLine(number);
}
0
0 / 0 / 0
Регистрация: 09.03.2024
Сообщений: 7
27.03.2024, 21:23  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Это самое простое... изменить тип на строку, посимвольно проверить на принадлежность ко множеству "237"... ну, или разобрать число поразрядно на цифры и также проверить...
Я начала как раз с этой идеи, но не очень понимаю, как его записать, если все подходит.
Примерно так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static List<int> Check (string x)
{
    int a = Convert.ToInt32(Console.ReadLine());
    List <int> numbers = new List <int> ();
 
    char q = '2';
    char w = '3';
    char e = '7';
 
    bool t = true;
 
    for (int i = 0; i < a; i++)
    {
        char[] b = i.ToString().ToCharArray();
        for (int j = 0; j < b.Length; j++) 
        {
            if ((b[j] != q) || (b[j] != w) || (b[j] != w)) break;
            
        }
    }
   
}
0
27.03.2024, 22:52

Не по теме:

Цитата Сообщение от nedel Посмотреть сообщение
Это если искать не то, что просят в задании, как правильно подметил
Я понял уже. Вы и wizard41 были правы.

0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
28.03.2024, 21:12
Цитата Сообщение от Lleyna Посмотреть сообщение
не очень понимаю, как его записать, если все подходит.
Примерно так:
Ну, почти...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
List<int> numbers = [];
string str = "237";
Console.WriteLine("Введите целое число:");
var input = Console.ReadLine();
if (int.TryParse(input, out int num)) {
    for (int i = 0; i <= num; i++) {
        bool flg = true;
        foreach (char item in i.ToString().ToCharArray()){
            if (!str.Contains(item)){
                flg = false;
                break;
            }
        }
        if (flg) {numbers.Add(i);}
    }
    Console.WriteLine(numbers.Count);
    //for(int j = 0; j < 20; j++) {
    //    Console.WriteLine(numbers[j]);
    //}
} else {
    Console.WriteLine("Число надо было вводить...");
}
0
 Аватар для zhunshun
768 / 496 / 216
Регистрация: 05.04.2015
Сообщений: 2,080
29.03.2024, 11:59
Lleyna,
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
using System;
using System.Collections.Generic;
public class Program
{
    struct Label{
        public int a;
        public int b;
        public int c;
        public int r;
    }
    static readonly int[] keys = {2,3,7};
    public static void Main(string[] args)
    {
        int i = 0,s = 0,h=1;
        var array = new List<int>();
        Func<int, int, int, int> formula = (am, bm, s) => am * bm + s;
        int num = int.Parse("26478");
        while(i < num){
            if(IsPossible(i))
                array.Add(i);
            i = s + h;
            s = i;
        }
        var all = new List<Label>();
        for(int n = 0; n < array.Count; n++)
        for(int m = 0; m < array.Count; m++)
        for(int k = 0; k < array.Count; k++){
            var result = formula(array[n], array[m], array[k]);
            if(result != num)continue;
            Label label;
            label.a = array[n];
            label.b = array[m];
            label.c = array[k];
            label.r = result;
            all.Add(label);
        }
        PrintF(all);
    }
    static void PrintF(List<Program.Label> list){
        for(int j = 0; j < list.Count; j++){
            var obj = list[j];
            for(int l = 0; l < list.Count; l++){
                if(obj.a == list[l].b)
                list.RemoveAt(l);
            }
            Console.WriteLine(obj.a.ToString() + "*" + obj.b.ToString() + "+" + obj.c.ToString() + " = " + obj.r.ToString()); 
        }
    }
    static bool IsPossible(int item){
        int length = item.ToString().Length;
        int count = 0;
        while(item % 10 > 0){
            if(keys.Contains(item % 10))count++;
            item /= 10; 
        }
        return count == length;
    }
}
1
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
29.03.2024, 13:31
zhunshun, чуток конструктивной "критики" :
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
using System;
using System.Collections.Generic;
public class Program
{
    struct Label{
        public int a;
        public int b;
        public int c;
        public int r;
    }
    static readonly int[] keys = {2,3,7};
    public static void Main(string[] args)
    {
        int i = 0;
        var array = new List<int>();
        var formula = (int am, int bm, int s) => am * bm + s;
        int num = int.Parse("28687478");
        while(i < num){
            if(IsPossible(i))
                array.Add(i);
            i++;
        }
        var all = new List<Label>();
        for(int n = 0; n < array.Count; n++)
            for(int m = 0; m < array.Count; m++){
                var prod = array[n] * array[m];
                if (prod >= num) break;
                int res = num - prod;
                if (array.Contains(res)) {
                    int k = array.IndexOf(res);
                    var result = formula(array[n], array[m], array[k]);
                    if(result != num) continue;
                    Label label;
                    label.a = array[n];
                    label.b = array[m];
                    label.c = array[k];
                    label.r = result;
                    all.Add(label);
                }
            }
        PrintF(all);
    }
    static void PrintF(List<Program.Label> list){
        for(int j = 0; j < list.Count; j++){
            var obj = list[j];
            for(int l = 0; l < list.Count; l++){
                if(obj.a == list[l].b)
                list.RemoveAt(l);
            }
            Console.WriteLine($"{obj.a} * {obj.b} + {obj.c} = {obj.r}"); 
        }
    }
    static bool IsPossible(int item){
        int length = item.ToString().Length;
        int count = 0;
        while(item % 10 > 0){
            if(!keys.Contains(item % 10)) {
                break;
            } else count++;
            item /= 10; 
        }
        return count == length;
    }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2024, 13:31

Вывести на экран все возможные различные способы представления числа в виде суммы натуральных чисел
Дано натуральное число N. Требуется получить и вывести на экран все возможные различные способы представления этого числа в виде суммы...

Рекурсия: вывести все возможные представления натурального числа N в виде суммы других натуральных чисел
Добрый день, мне нужно написать Рекурсивную Функцию, которая выводит на дисплей все возможные представления натурального числа N в виде...

Рекурсия: все возможные представления натурального числа N в виде суммы других натуральных чисел
Создайте рекурсивную функцию, которая выводит на дисплей все возможные представления натурального числа N в виде суммы других натуральных...

Разработать процедуру, которая печатает все возможные представления натурального числа N в виде суммы других натуральных
Задача: Разработать процедуру, которая печатает все возможные представления натурального числа N в виде суммы других натуральных. ...

Вывести все возможные варианты числа, число разрядов задает пользователь
Всем добрый день)))) столкнулся с такой проблемой, где нужно вывести все возможные варианты т.е. на форме имеется Edit, Button,...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru