Guest User

Untitled

a guest
Jun 1st, 2016
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.05 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