2010-07-25 3 views
2
int numbs[4][4] = 
    1, 2, 3, 4 
    5, 6, 7, 8 
    9, 10, 11, 12 
    13, 14, 15, 16; 

Lorsque je l'imprime, il est conseillé d'imprimer comme ceci.Comment imprimer une matrice 4x4 dans le sens des aiguilles d'une montre à l'aide de C#

1 2 3 4, 8, 12,16, 15, 14, 13, 9, 5, 6, 7, 11, 10, (spirale de direction à-dire dans le sens horaire):

---\ //first right, then down, left, up and repeat 
/-\| 
|-/| 
\--/ 
+1

Vous devez être plus précis sur ce que vous rencontrez des problèmes et nous montrer ce que vous avez déjà essayé. –

+1

Qu'avez-vous essayé, et où êtes-vous coincé? Nous sommes heureux de vous aider, mais vous devrez d'abord travailler un peu. –

+4

Alors pourquoi était-ce fermé comme n'étant pas une vraie question? Il semble parfaitement clair ce qui était demandé. Je pense que vous avez sauté le flingue en fermant ça. –

Répondre

3

Voici mon coup de couteau à elle:

static void Spiral(int[,] m) 
    { 
     int n = m.GetUpperBound(0); 
     for (int i = 0; i < n/2; ++i) 
     { 
      for (int j = i; j <= n - i; ++j) 
       Console.Write(m[i, j] + " "); 
      for (int j = i + 1; j <= n - i; ++j) 
       Console.Write(m[j, n - i] + " "); 
      for (int j = i + 1; j <= n - i; ++j) 
       Console.Write(m[n - i, n - j] + " "); 
      for (int j = i + 1; j < n - i; ++j) 
       Console.Write(m[n - j, i] + " "); 
     } 

     Console.Write(m[n/2, n/2]+" "); 
     if (n % 2 == 1) 
     { 
      Console.Write(m[n/2, n/2+1] + " "); 
      Console.Write(m[n/2+1, n/2+1] + " "); 
      Console.Write(m[n/2+1, n/2] + " "); 
     } 
    } 

    static void Main(string[] args) 
    { 
     int[,] myArray = new int[,]{ 
      {11, 12, 13, 14, 15}, 
      {21, 22, 23, 24, 25}, 
      {31, 32, 33, 34, 35}, 
      {41, 42, 43, 44, 45}, 
      {51, 52, 53, 54, 55} 
     }; 
     Spiral(myArray); 
    } 

La sortie est:

11 12 13 14 15 25 35 45 55 54 53 52 51 41 31 21 22 23 24 34 44 43 42 32 33 

modifier: Works pour les deux même et taille étrange matrices carrées maintenant.

+0

Merci cela fonctionne. –

3

Avez-vous une technique spécifique que vous êtes censé utiliser pour cet exercice? Sinon, vous pouvez simplement écrire du code qui fait que:

Console.WriteLine(theArray[0,0]); 
Console.WriteLine(theArray[1,0]); 
Console.WriteLine(theArray[2,0]); 
Console.WriteLine(theArray[3,0]); 
Console.WriteLine(theArray[3,1]); 
Console.WriteLine(theArray[3,2]); 
Console.WriteLine(theArray[3,3]); 
Console.WriteLine(theArray[2,3]); 
Console.WriteLine(theArray[1,3]); 
Console.WriteLine(theArray[0,3]); 
Console.WriteLine(theArray[0,2]); 
Console.WriteLine(theArray[0,1]); 
Console.WriteLine(theArray[1,1]); 
Console.WriteLine(theArray[2,1]); 
Console.WriteLine(theArray[2,2]); 
Console.WriteLine(theArray[1,2]); 
+0

Je me demande pourquoi cette réponse a 6 votes? Évidemment, la question nécessite une technique. N'importe qui pourrait le faire avec 200 WriteLines !!! – bits

+0

@bits: Peut-être parce que c'est la solution la plus simple et la plus simple. (Oh, et vous n'avez pas besoin de 200 lignes pour imprimer un tableau 4x4, vous n'avez besoin que de 16 lignes.) – Guffa

+1

_Au moins_ faites-le en boucle sur les coordonnées respectives. – Svante

Questions connexes