Advertisement
Guest User

Untitled

a guest
Sep 6th, 2016
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4.  
  5.  
  6. class Program
  7. {
  8. static void Main()
  9. {
  10. string[] input = Console.ReadLine().Split();
  11. int r = int.Parse(input[1]);
  12. int c = int.Parse(input[2]);
  13.  
  14. switch (input[0])
  15. {
  16. case "A": PrintMatrix(TypeA(r, c)); break;
  17. case "B": PrintMatrix(TypeB(r, c)); break;
  18. case "C": PrintMatrix(TypeC(r, c)); break;
  19. case "D": PrintMatrix(TypeD(r, c)); break;
  20. default: break;
  21. }
  22. }
  23.  
  24. static int[,] TypeA(int r, int c)
  25. {
  26. int[,] m = new int[r, c];
  27. int number = 1;
  28.  
  29. for (int i = 0; i < c; i++)
  30. {
  31. for (int j = 0; j < r; j++)
  32. {
  33. m[j, i] = number;
  34. number++;
  35. }
  36. }
  37.  
  38. return m;
  39. }
  40.  
  41. static int[,] TypeB(int r, int c)
  42. {
  43. int[,] m = new int[r, c];
  44. int number = 1;
  45.  
  46. for (int i = 0; i < c; i++)
  47. {
  48. for (int j = 0; j < r; j++)
  49. {
  50. if (i % 2 == 0) { m[j, i] = number; number++; }
  51. else { m[r - 1 - j, i] = number; number++; }
  52. }
  53. }
  54.  
  55. return m;
  56. }
  57.  
  58. static int[,] TypeC(int r, int c)
  59. {
  60. int[,] m = new int[r, c];
  61. int number = 1;
  62.  
  63. for (int i = r - 1; i >= 0; i--)
  64. {
  65. int startR = i;
  66. for (int j = 0; j < r - startR; j++)
  67. {
  68. if (j > c - 1) { break; }
  69. m[startR + j, j] = number; number++;
  70. }
  71. }
  72.  
  73. for (int i = 1; i < c; i++)
  74. {
  75. int startC = i;
  76. for (int j = 0; j < c - startC; j++)
  77. {
  78. if (j > r - 1) { break; }
  79. m[j, startC + j] = number; number++;
  80. }
  81. }
  82.  
  83. return m;
  84. }
  85.  
  86. static int[,] TypeD(int r, int c)
  87. {
  88. int[,] m = new int[r, c];
  89. int number = 1;
  90. int indexR = 0;
  91. int indexC = 0;
  92.  
  93. while (number <= r * c)
  94. {
  95. m[indexR, indexC] = number;
  96. number++; ;
  97.  
  98. bool canGoDown = (indexR + 1) < r && m[indexR + 1, indexC] == 0 && !((indexC - 1) >= 0 && m[indexR, indexC - 1] == 0);
  99. if (canGoDown) { indexR++; continue; }
  100. bool canGoRight = (indexC + 1) < c && m[indexR, indexC + 1] == 0;
  101. if (canGoRight) { indexC++; continue; }
  102. bool canGoUp = (indexR - 1) >= 0 && m[indexR - 1, indexC] == 0;
  103. if (canGoUp) { indexR--; continue; }
  104. bool canGoLeft = (indexC - 1) >= 0 && m[indexR, indexC - 1] == 0;
  105. if (canGoLeft) { indexC--; continue; }
  106. }
  107.  
  108. return m;
  109. }
  110.  
  111. static void PrintMatrix(int[,] m)
  112. {
  113. for (int i = 0; i < m.GetLength(0); i++)
  114. {
  115. for (int j = 0; j < m.GetLength(1); j++)
  116. {
  117. Console.Write($"{m[i, j]} ");
  118. }
  119. Console.WriteLine();
  120. }
  121. }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement