Условия задачи:
Напечатать на экране следующее:
1
2-1
1-2-3
4-3-2-1
1-2-3-4-5
6-5-4-3-2-1
(Естественно, вместо 6 может быть любое число).
Итак первое решение:
int MAX = 6; for(int i = 1; i <= MAX; i++) { if(i % 2 == 0) for(int j = i; j > 1; j--) if (j != 1) Console.Write(j.ToString() + "-"); else Console.Write(j.ToString() + Environment.NewLine); else for(int k = 1; k <= i; k++) if (k != i) Console.Write(k.ToString() + "-"); else Console.Write(k.ToString() + Environment.NewLine); }Затем попытался топорно свернуть его. Пришлось подумать. Вспомнил про Enumerable.Range.
int MAX = 6; for (int i = 1; i <= MAX; i++) ((i % 2 == 0) ? Enumerable.Range(1, i). Reverse().ToList() : Enumerable.Range(1, i).ToList()).ForEach(n => { if (i % 2 == 0) if (n != 1) Console.Write(n.ToString() + "-"); else Console.Write(n.ToString() + Environment.NewLine); else if (n != i) Console.Write(n.ToString() + "-"); else Console.Write(n.ToString() + Environment.NewLine); });Все это в одну строку (кроме int MAX = 6). Затем вспомнил про string.Join.
Финальная версия:
int MAX = 6; for (int i = 1; i <= MAX; i++) Console.WriteLine(string.Join<int>(@"-", (i % 2 == 0) ? Enumerable.Range(1, i).Reverse() : Enumerable.Range(1, i)));
Комментариев нет:
Отправить комментарий