Guest User

Untitled

a guest
May 25th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace PermAndComb
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. string s = "abcd";
  13. Permutation(s);
  14. Console.ReadKey();
  15.  
  16. }
  17.  
  18. public static void Permutation(string s)
  19. {
  20. int len = s.Length;
  21. char [] inStr = s.ToCharArray();
  22. StringBuilder outStr = new StringBuilder();
  23. bool[] used = new bool[len];
  24.  
  25. doPermute(inStr, outStr,used, len, 0);
  26.  
  27. }
  28.  
  29. public static void doPermute(char[] instr, StringBuilder outStr,bool [] used, int len, int level)
  30. {
  31. if (level == len)
  32. {
  33. Console.WriteLine(outStr.ToString());
  34. return;
  35. }
  36.  
  37. for (int i = 0; i < len; i++)
  38. {
  39. if (used[i]) continue;
  40. outStr.Append(instr[i]);
  41. used[i] = true;
  42. doPermute(instr, outStr, used, len, level + 1);
  43. used[i] = false;
  44. outStr.Length = outStr.Length - 1;
  45.  
  46. }
  47.  
  48. }
  49. }
  50. }
  51.  
  52. string str = "abcd";
  53.  
  54. Func<int, int> factorial = n =>
  55. Enumerable.Range(1, n)
  56. .Aggregate((i, j) => i * j);
  57. Func<int, int[]> tofactoradic = n =>
  58. Enumerable.Range(1, n)
  59. .Reverse()
  60. .Select(i => { var m = n; n /= i; return m % i; })
  61. .ToArray();
  62. Func<int[], string, string> Apply = (f, s) => {
  63. var chars = s.ToList();
  64. var result = "";
  65. for (int i = 0; i < s.Length; i++) {
  66. result += chars[f[i]];
  67. chars.RemoveAt(f[i]);
  68. }
  69. return result;
  70. };
  71.  
  72. int max = factorial(str.Length);
  73. for (int i = 0; i < max; i++ ) {
  74. var f = tofactoradic(i);
  75. Console.WriteLine(Apply(f, str));
  76. }
Add Comment
Please, Sign In to add comment