2017-02-07 6 views
0

18で終わる三角形の上半分を入れ子になったforループで表示する方法が見つかりました。ネストされたforループの下半分をどのように表示するかはわかりません(ネストされたforループ内になければなりません)。また、緑と赤の色をどのように交換するのか?任意のヒント?C#Number Triangle昇順と降順2で

enter image description here

は、ここで私が持っているものです。

int n1, n2, n3; 

// Top Triangle nested for loop 
for (n1 = 2; n1 <=18; n1++) 
{ 
    for (n2 = 2; n2 <= n1; n2++) 
    { 
     Console.Write("{0} ", n2); 
     n2++; 
    } 
    n1++; 
    Console.WriteLine(); 
} 

// Bottom triangle nested for loop 
// This is where I'm stuck 
+0

をご希望の行動その絵ですか既に行ったことのスクリーンショット – Abion47

+0

これは望ましい動作です。 – Dillon

+0

[Console.SetCursorPosition'](https://msdn.microsoft.com/en-us/library/system.console.setcursorposition(v = vs.110).aspx)メソッドと[' Console.ForegroundColor'](https://msdn.microsoft.com/en-us/library/system.console.foregroundcolor%28v=vs.110%29.aspx)プロパティを参照してください。 – Abion47

答えて

0
 for (n1 = 2; n1 <= 18; n1++) 
     { 
      for (n2 = 2; n2 <= n1; n2++) 
      { 
       Console.Write("{0} ", n2); 
       n2++; 
      } 
      n1++; 
      Console.WriteLine(); 
     } 
     for (n1 = 2; n1 <= 18; n1++) 
     { 
      for (n2 = 2; n2 <= 18 - n1; n2++) 
      { 
       Console.Write("{0} ", n2); 
       n2++; 
      } 
      n1++; 
      Console.WriteLine(); 
     } 
+0

「18 - 」に注意してください。これが違いです。 – Ron

0

下三角部分:変更色で

// Bottom triangle nested for loop 
     for (n1 = 16; n1 > 2; n1 -= 2) 
     { 
      for (n2 = 2; n2 <= n1; n2 += 2) 
      { 
       Console.Write("{0} ", n2); 
      } 
      Console.WriteLine(); 
     } 

全コード:

static bool _isRedColor = true; 
    static void Main(string[] args) 
    { 
     int n1, n2; 

     // Top Triangle nested for loop 
     for (n1 = 2; n1 <= 18; n1 += 2) 
     { 
      _isRedColor = true; 
      for (n2 = 2; n2 <= n1; n2 += 2) 
      { 
       SetConsoleColor(); 
       Console.Write("{0} ", n2); 
       //n2++; 
      } 
      //n1++; 
      Console.WriteLine(); 
     } 

     // Bottom triangle nested for loop 
     for (n1 = 16; n1 > 2; n1 -= 2) 
     { 
      _isRedColor = true; 
      for (n2 = 2; n2 <= n1; n2 += 2) 
      { 
       SetConsoleColor(); 
       Console.Write("{0} ", n2); 
      } 
      Console.WriteLine(); 
     } 
    } 

    private static void SetConsoleColor() 
    { 
     if (_isRedColor) 
     { 
      Console.ForegroundColor = ConsoleColor.DarkRed; 
      _isRedColor = !_isRedColor; 
     } 
     else 
     { 
      Console.ForegroundColor = ConsoleColor.DarkGreen; 
      _isRedColor = !_isRedColor; 
     } 
    } 
0

あなたの質問は面白かったので、ここではworking example in fiddleと私の所見を共有したいと思っています。私はいくつかの追加の変数と名前を変更した既存の変数を使用していますので、誤解を招くことはありません。次の行を見て、あなたに説明が必要かどうか教えてください。

int loopLimit = 18; 
int outerLoopCounter, innerLoopCounter = 2, upperBoudIterator = 2; 

// Top Triangle nested for loop 
for (outerLoopCounter = 0; outerLoopCounter <= 18; outerLoopCounter++) 
{ 
    innerLoopCounter = 2; 
    while (innerLoopCounter <= upperBoudIterator) 
    { 
     if (innerLoopCounter <= loopLimit) 
      Console.Write("{0} ", innerLoopCounter);    
     innerLoopCounter += 2; 
    }; 
    if (innerLoopCounter > loopLimit) 
     loopLimit -= 2; 
    upperBoudIterator += 2; 
    Console.WriteLine(); 
} 
0

私はこれを学術練習として試してみました。私はコメントで述べたメソッドとプロパティを使用して、単一のループネスト・ループのペアでこれをやってのけることができます。

int max = 18; 
int cursorX = 0; 
int count, digits; 

for (int i = 2; i <= max; i += 2) 
{ 
    count = max - i + 1; 
    digits = i.ToString().Length; 
    Console.ForegroundColor = (i % 4 == 0) ? ConsoleColor.Red : ConsoleColor.Green; 

    for (int y = 0; y < count; y++) 
    { 
     Console.SetCursorPosition(cursorX, y + (i/2) - 1); 
     Console.Write(i); 
    } 

    cursorX += digits + 1; 
} 

結果:

enter image description here

関連する問題