2017-02-07 5 views
0

Я нашел способ отобразить верхнюю половину треугольника, заканчивающегося на 18, с вложенным циклом. Я не могу понять, как отображать нижнюю половину в замкнутом цикле (он должен быть в замкнутом цикле). Также, как сделать цвет обмена зеленым и красным? Какие-нибудь советы?C# Number Треугольник по возрастанию и убыванию по 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