Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 2
.NET 4.x

Получить шесть чисел, образованых при перестановке цифр трехзначного числа

06.08.2018, 22:57. Показов 4974. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Я начинающий .NET разработчик. Изучаю C# по видеокурсам ITVDN, а также использую приложения SoloLearn на iOS и Android, для практики использую сборник задач Златопольского.

Задача 2.18: Дано 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
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _2._18
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter three-digit number");
 
            //Вводим произвольное 3-х значное число (для примера 123)
            int digitNumber = Convert.ToInt32(Console.ReadLine());
 
            // Разбиваем число на базовые елементы 
            int firstNumber = digitNumber / 100; 
            int secondNumber = ((digitNumber - (digitNumber / 100) * 100)) / 10;
            int thirdNumber = digitNumber % 10;
 
            //123
            Console.WriteLine($"The first result is = {firstNumber*100+secondNumber*10+thirdNumber}");
            //132
            Console.WriteLine($"The second result is = {firstNumber * 100 + secondNumber + thirdNumber*10}");
            //312
            Console.WriteLine($"The third result is = {firstNumber + secondNumber*10 + thirdNumber * 100}");
            //321
            Console.WriteLine($"The fourth result is = {firstNumber * 10 + secondNumber + thirdNumber * 100}");
            //213
            Console.WriteLine($"The fifth result is = {firstNumber * 10 + secondNumber*100 + thirdNumber}");
            //231
            Console.WriteLine($"The sixth result is = {firstNumber + secondNumber*100 + thirdNumber * 10}");
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2018, 22:57
Ответы с готовыми решениями:

Получить шесть чисел, образованных при перестановке цифр трехзначного числа
PascalABC.NET ПОМОГИТЕ ПОЖАЛУЙСТА Условия. Дано трехзначное число в котором все цифры различны. Получить шесть чисел, образованных при...

Получить шесть чисел при перестановке цифр заданного числа
Дано трехзначное число в котором все цифры различны получить шесть чисел при перестановке цифр заданного числа!!!! Помогите...

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

8
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
06.08.2018, 23:50
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static int[] GetDigitsVariants(int num)
{
    var variants = new int[][]
    {
        new int []{ 0, 1, 2},
        new int []{ 0, 2, 1},
        new int []{ 2, 0, 1},
        new int []{ 2, 1, 0},
        new int []{ 1, 2, 0},
        new int []{ 1, 0, 2},
    };
    var digits = new int[] { num / 100, (num % 100) / 10, num % 10 };
    var result = new int[variants.GetLength(0)];
    for (int i = 0; i < result.Length; i++)
    {
        var item = variants[i];
        result[i] = digits[item[0]] * 100 + digits[item[1]] * 10 + digits[item[2]];
    }
    return result;
}
0
18 / 13 / 10
Регистрация: 06.11.2016
Сообщений: 58
07.08.2018, 05:06
C#
1
2
3
4
5
6
7
static void Main(string[] args)
{
    var numbers = Console.ReadLine();
    for (int i = 0, numberCounter = 1; i < 3; i++)
        Console.WriteLine(numberCounter++ + " число - " + numbers[i] + numbers[(i+1)%3] + numbers[(i + 2)%3] + Environment.NewLine + numberCounter++ + " число - " + numbers[i] + numbers[(i + 2) % 3] + numbers[(i + 1) % 3]);
    Console.ReadLine();
}
Добавлено через 20 минут
Если хочется без циклов, тогда так
C#
1
2
3
4
5
6
7
8
9
10
static void Main(string[] args)
{
    var numbers = Console.ReadLine();
    int i = 0, numberCounter = 1;
    Console.WriteLine(String.Join(Environment.NewLine, 
                              numberCounter++ + " число - " + numbers[i] + numbers[(i + 1) % 3] + numbers[(i + 2) % 3] , numberCounter++ + " число - " + numbers[i] + numbers[(i + 2) % 3] + numbers[(i++ + 1) % 3] ,
                              numberCounter++ + " число - " + numbers[i] + numbers[(i + 1) % 3] + numbers[(i + 2) % 3] , numberCounter++ + " число - " + numbers[i] + numbers[(i + 2) % 3] + numbers[(i++ + 1) % 3] ,
                              numberCounter++ + " число - " + numbers[i] + numbers[(i + 1) % 3] + numbers[(i + 2) % 3] , numberCounter++ + " число - " + numbers[i] + numbers[(i + 2) % 3] + numbers[(i++ + 1) % 3]));
    Console.ReadLine();
}
Или так
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
{
    var numbers = Console.ReadLine();
    Console.WriteLine(String.Join(Environment.NewLine, GetTwoVariants(numbers, 0, 1), GetTwoVariants(numbers, 1, 3), GetTwoVariants(numbers, 2, 5)));
    Console.ReadLine();
}
 
static string GetTwoVariants(string numbers, int i, int numberCounter) => numberCounter++ + " число - " + numbers[i] + numbers[(i + 1) % 3] + numbers[(i + 2) % 3] + Environment.NewLine + numberCounter + " число - " + numbers[i] + numbers[(i + 2) % 3] + numbers[(i++ + 1) % 3];
0
4 / 4 / 2
Регистрация: 06.06.2018
Сообщений: 24
07.08.2018, 20:09
Привет)я тоже изучаю C# по ITVDN,давай как-то скооперируемся,может проще выйдет!

Добавлено через 29 минут
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
using System;
 
namespace _1st
{
    class Program
    {
        static void Main(string[] args)
        {
          
            Console.WriteLine("Введите трехзначное число: ");
            int z = Convert.ToInt32(Console.ReadLine());
           
 
            int a = z % 10;
            int b = ((z - a) / 10) % 10;
            int c = (z - (b * 10 + a)) / 100;
       
            Console.WriteLine("{3} = {2} {1} {0}:", a, b, c, z);
            Console.WriteLine("1: {2}{1}{0}", a, b, c);
            Console.WriteLine("2: {2}{0}{1}", a, b, c);
            Console.WriteLine("3: {1}{2}{0}", a, b, c);
            Console.WriteLine("4: {2}{1}{0}", a, b, c);
            Console.WriteLine("5: {0}{1}{2}", a, b, c);
            Console.WriteLine("6: {0}{2}{1}", a, b, c);
 
 
            Console.ReadKey();
        }
    }
}
0
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 2
07.08.2018, 21:14  [ТС]
Evgeny25, я только телеграмм, Вайбер или здесь на форуме?
0
4 / 4 / 2
Регистрация: 06.06.2018
Сообщений: 24
07.08.2018, 21:15
нарушение п.п. 4.6
Напиши,а там разберемся что и как)
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
08.08.2018, 05:36
Цитата Сообщение от ViterAlex Посмотреть сообщение
variants
как-то не спортивно... А если нужно будет для последовательности из 5 элементов?

Если асбтрагироватся от количества и качества последовательности, то как-то так...

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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            PrintAllCombination(new[] { "Miku", "Rin", "Len" });
            PrintAllCombination(new[] { 'a', 'b', 'c', 'd' });
            PrintAllCombination(new[] { 1, 2, 3, 4, 5 });
 
            Console.ReadKey();
        }
 
        static void PrintAllCombination<T>(T[] arr)
        {
            var current = new List<T>(arr.Length);
            var repeate = GetFactorialList(arr.Length);
            var all = repeate[0];
            for (var i = 0; i < all; i++)
            {
                current.AddRange(arr);
                var n = arr.Length - 1;
                for (var l = 0; l < n; l++)
                {
                    var index = i % repeate[l] / repeate[l + 1];
                    Console.Write(current[index]);
                    current.RemoveAt(index);
                }
                Console.Write(current[0]);
                current.Clear();
                Console.WriteLine();
            }
        }
 
        static int[] GetFactorialList(int length)
        {
            var arr = new int[length];
            var current = 1;
            for (var i = 0; i < length; i++)
                arr[i] = current *= i + 1;
            return arr.Reverse().ToArray();
        }
    }
}
Еще такая задача решается через рекурсии, но я жуть их как не люблю.

Если пря без циклов и не грузить дженериками...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            // Вводим произвольное 3 - х значное число(для примера 123)
            //int digitNumber = Convert.ToInt32(Console.ReadLine());
            var digitNumber = 123;
 
            // Разбиваем число на базовые елементы 
            int first = digitNumber / 100;
            int second = ((digitNumber - (digitNumber / 100) * 100)) / 10;
            int third = digitNumber % 10;
 
            //123
            Console.WriteLine($"The 1 result is = {first}{second}{third}");
            Console.WriteLine($"The 2 result is = {first}{third}{second}");
            Console.WriteLine($"The 3 result is = {second}{first}{third}");
            Console.WriteLine($"The 4 result is = {second}{third}{first}");
            Console.WriteLine($"The 5 result is = {third}{first}{second}");
            Console.WriteLine($"The 6 result is = {third}{second}{first}");
Цитата Сообщение от ViktorDessad Посмотреть сообщение
Если ли более компактное решение этой задачи (без циклов)?
Компактность != правильно. Правильный код должен:
- быстро решать задачу. Вариант из 6 Console.WriteLine будет найболее шустрый.
- быть довольно гибким. Ну я привел пример.
- требовать минимум ресурсов. Те же рекурсии позволять не плодить массивы (но выжрут стек)

И в отличии от анекдота, где выбирает 2, в программировании не редко бьются чтобы добиться хотя бы одного. Более того, если в задаче присутствует последовательность, то с вероятностью 99% будут задействованы циклы/Linq.

Цитата Сообщение от ViktorDessad Посмотреть сообщение
ITVDN

Нядеюсь, хоть не платили....
1
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
08.08.2018, 07:57
Цитата Сообщение от Wolfdp Посмотреть сообщение
А если нужно будет для последовательности из 5 элементов
В общем виде это решается перестановками.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Вариант из 6 Console.WriteLine будет найболее шустрый
Задача не в том, чтобы напечатать, а чтобы получить шесть чисел, образованных перестановкой цифр исходного числа.
0
4 / 4 / 2
Регистрация: 06.06.2018
Сообщений: 24
08.08.2018, 12:28
не платили,Скачали) а мне нравится манера преподавания Александра Шевчука) ничего лучше пока не нашел)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.08.2018, 12:28
Помогаю со студенческими работами здесь

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

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

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

Получить числа, образующиеся при перестановке цифр заданного трехзначного числа
Дано трехзначное число, в котором все цифры различны. Получить шесть чи- сел, образованных при перестановке цифр заданного числа.

Вывести число, полученное при перестановке цифр десятков и единиц трехзначного числа
Дано трехзначное число. Вывести число, полученное при перестановке цифр десятков и единиц исходного числа (например, 123 перейдет в 132) ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru