Перебрать все варианты перестановки - C#
Формулировка задачи:
вот есть иверсная запись чисел, нужно в ней сделат ьперестановку например вводиш 3
а оно выводит
123 132 231 213 312 321
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lr1_a { class Program { static void Main(string[] args) { System.Console.Write("Введите инверсное число: "); String str = System.Console.ReadLine(); List<int> mas = new List<int>(str.Length); for (int i = str.Length - 1; i >= 0; i--) { mas.Insert(str[i] - 48, i + 1); } System.Console.Write("Число:"); for (int i = 0; i < str.Length; i++) System.Console.Write(mas[i]); System.Console.ReadKey(); } } }
Решение задачи: «Перебрать все варианты перестановки»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; namespace Algorithms { internal class Program { private static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); int[] r = Enumerable.Range(1, n).ToArray(); do Console.WriteLine(string.Join(" ", r)); while (NextPermutation(r)); Console.ReadKey(); } static bool NextPermutation<T>(IList<T> a) where T : IComparable<T> { if (a.Count < 2) return false; var k = a.Count - 2; while (k >= 0 && a[k].CompareTo(a[k + 1]) >= 0) k--; if (k < 0) return false; var l = a.Count - 1; while (l > k && a[l].CompareTo(a[k]) <= 0) l--; var tmp = a[k]; a[k] = a[l]; a[l] = tmp; var i = k + 1; var j = a.Count - 1; while (i < j) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; i++; j--; } return true; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д