Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Pascal's triangle
//Rextester.Program.Main is the entry point for your code. Don't change it. //Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5 using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; namespace Rextester { public class Program { public static void Main(string[] args) { // Print Pascal's triangle to Console // Put int another than 25 and run it (F8). Task2(25); } public static void Task2(int massiveSize) { // Подготовим консоль для работы пользователя //Console.Clear(); // 1. Инициализируем массив массивов int[][] nums = new int [massiveSize][]; // Заполняем массив массивов for (int i = 0; i < massiveSize - 1; i++) { // Инициализируем вложенный массив с заданной размерностью nums[i] = new int[i + 1]; // Заполняем вложенный массив значениями for (int j = 0; j < nums[i].Length; j++) { // Согласно правилу заполнения треугольника Паскаля, первое и последнее значение = 1 if (j == 0 || j == nums[i].Length - 1) { nums[i][j] = 1; continue; } // Остальные значения заполняем по правилу: // текущее значение (nums[i][j]) = сумма двух значений // предыдущего массива (nums[i - 1]) предыдущего ([j - 1]) и того же ([j]) порядка. nums[i][j] = nums[i - 1][j - 1] + nums[i - 1][j]; } } // 2. Выполним вывод в консоль // Установим расстояние между числами в строке int tab = 6; // Рассчитаем максимальную длину строки, как произведение размера массива массивов+1 * расстояние между числами int stringLength = (massiveSize + 1) * tab; // Если текущая консоль не вмещает сгенерированный треугольник, увеличим размер консоли #region for_console_only //if (Console.BufferWidth < stringLength) // Console.SetBufferSize(stringLength, Console.BufferHeight); #endregion //for_console_only // Запомним текущее положение курсора по вертикали #region for_console_only //int CursorTop = Console.CursorTop; #endregion //for_console_only #region for_rextester_com_only int CursorTop = 1; #endregion //for_rextester_com_only // Начнем обход массивов общего массива for (int i = 0; i < massiveSize - 1; i++) { // Инициализируем переменную хранения горизонтального положения курсора в строке в консоли int CursorPosition = 0; // Если текущий массив содержит нечетное кол-во значений или единственное значение if (nums[i].Length % 2 > 0 || nums[i].Length == 1) { // Нечетное количество элементов, тогда рассчитываем середину-вершину треугольника // путем деления максимальной длины строки пополам и смещаемся влево, в начало вывода // значений текущего массива, путем деления количества значений текущего массива пополам // со сдвигом (умножением) на заданное расстояние между числами CursorPosition = stringLength/2 - (nums[i].Length/2 * tab); } else { // Четное, тоже что и нечетное, но еще смещение на половину от заданного расстояния между // числами, что позволит отобразить строку с четным числом значений ровно между двумя нечетными // строками (массивами) треугольника CursorPosition = stringLength/2 + tab/2 - (nums[i].Length/2 * tab); } #region for_rextester_com_only // rextester.com: Теперь бежим по значениям текущего массива for (int cp = 0; cp < CursorPosition; cp++) { Console.Write(" "); } #endregion //for_rextester_com_only for (int j = 0; j < nums[i].Length; j++) { // Устанавливаем курсор консоли в рассчитанное положение #region for_console_only //Console.SetCursorPosition(CursorPosition, CursorTop); #endregion //for_console_only #region for_rextester_com_only int currentVal = nums[i][j]; int leghtCurrentVal = currentVal.ToString().Length; for (int tb = 1; tb < tab - leghtCurrentVal/2; tb++) { Console.Write(" "); } #endregion //for_rextester_com_only // Выводим текущее значение Console.Write(nums[i][j]); // Смещаем курсов на заданное расстояние между числами #region for_console_only //CursorPosition += tab; #endregion //for_console_only } // Для вывода очередной строки (значений массива) смещаемся ниже на одну строку #region for_console_only //CursorTop += 1; #endregion //for_console_only #region for_rextester_com_only Console.WriteLine(""); #endregion //for_rextester_com_only } } } }
run
|
edit
|
history
|
help
1
Plt-D v.0.9.3
ElaineBrown**
2 point gradient (v2)
Math 9.6
Class
Main
Test equality
Rotate array to the right of a given pivot
Numbers separated by space
Fiddling around