1. 程式人生 > >控制檯文字矩陣、菱形排列(充分展示用邏輯替代內迴圈的處理技巧)

控制檯文字矩陣、菱形排列(充分展示用邏輯替代內迴圈的處理技巧)

那個矩陣排列確費不少腦力哦,菱形用陣列倒序填,這些例子都是給初學參考。

            var 陣列 = Enumerable.Repeat(0, 7).ToArray();
            string[] 字元組 = new string[7];
            int 數 = 7, 序 = 0, 填 = 0;
            foreach (var 矩 in Enumerable.Range(1, 7))
            {
                if (矩 <= 4) 填++; else 填--;
                foreach (var 陣 in Enumerable.Range(序, 數)) { 陣列[陣] = 填; 字元組[陣] = " 阿彌陀佛"[填].ToString(); }
                if (矩 < 4) { 數 -= 2; 序++; } else { 數 += 2; 序--; }
                //Console.WriteLine(string.Join(" ", 陣列));
                Console.WriteLine(string.Concat(字元組));
            }

菱形

            string 啊啊啊 = ""; string[] 啊啊 = new string[15];
            foreach (var 啊 in Enumerable.Range(1, 8))
            {
                啊啊[啊 - 1] = "        ".Remove(8 - 啊) + 啊啊啊 + "☆\r";
                啊啊[15 - 啊] = "        ".Remove(8 - 啊) + 啊啊啊 + "☆\r";
                啊啊啊 += "☆";
            }
            foreach (var 啊啊啊啊 in 啊啊) Console.WriteLine(啊啊啊啊);

c++

	int 層(8), 數(1), 計(8);
	do
	{
		if (計 > 數) 
			cout << " ";
		else
			cout << " " << 數;
		if (!--計)
		{
			cout << endl;
			計 = 8;
			數++;
			層--;
		}
	} while (層);
	層 = 計 = 7; 數 -= 2;
	do
	{
		if (計 == 7)
			cout << " ";
		if (計 > 數)
			cout << " ";
		else
			cout << " " << 數;
		if (!--計)
		{
			cout << endl;
			計 = 7;
			數--;
			層--;
		}
	} while (層);


優化程式碼:

	int 層(8), 數(1), 計 = 層; bool 控制(false);
	do/*數字菱形*/
	{
		if (控制)if (計 == 7)
			cout << " ";
		if (計 > 數) 
			cout << " ";
		else
			cout << " " << 數;
		if (!--計)
		{
			cout << endl;
			計 = 控制 ? 7 : 8;
			控制 ? 數-- : 數++;
			層--;
		}
		if (!控制)if (!層)
		{
			控制 = true;
			層 = 計 = 7;
			數 -= 2;
		}
	} while (層);
	/*C語言基礎:for迴圈巢狀,這段程式碼該怎樣寫更簡練*/
	int i, j, k, z;
	for (i = 0, z = -4; ; ++i, z++)
	{
		if (z > 0) i -= 2;
		for (k = 0; k <= 3 - i; ++k)
			printf_s(" ");
		for (j = 0; j <= 2 * i; ++j)
			printf_s("*");
		printf_s("\n");
		if (i == 0 && z > 0)
			break;
	}


VB:

        '2-9範圍內自動生成菱形
        Dim 數 = 9, 個 = 0, 空格 = String.Join(" ", New String(數) {})
        For 序 As Integer = 1 To 數 Step 1
            空格 = 空格.Remove(空格.Length - 1)
            Console.WriteLine(空格 + String.Join("", Enumerable.Repeat(序, 序 + 個)))
            個 += 1
        Next
        個 -= 1
        For 序 As Integer = 數 - 1 To 1 Step -1
            空格 += " "
            個 -= 1
            Console.WriteLine(空格 + String.Join("", Enumerable.Repeat(序, 序 + 個)))
        Next


c++字元陣列形式:

	/*用C++編寫程式,用陣列char a[][]顯示寬瘦菱形,設定維度公式第一項值,如果顯示數字則在2-9單字範圍,如果顯示單字元則任意長度範圍內自動生成*/
	const int 維(9 * 2 - 1);
	int 數(0), 計(0), 反(維 - 1), 層((維 + 1) / 2);
	char 菱形[維][維] = { {} };
	do
	{
		菱形[計][數] = (數 + 計 < 層 - 1 || 數 + 計 >= 層 + 計 + 計) ? ' ' : '*';
		if (計 <= !(層 % 2) ? 層 / 2 : 層 / 2 + 1)
			菱形[反 - 計][數] = 菱形[計][數];/*生成反向*/
		if (++數 >= 維)
		{
			數 = 0;
			計++;
		}
	} while (計 < 層);
	數 = 計 = 0;
	do
	{
		std::cout << 菱形[計][數];
		if (++數 >= 維)
		{
			std::cout << std::endl;
			數 = 0;
			計++;
		}
	} while (計 < 維);
	數 = 計= 0;
	do
	{
		std::cout << 菱形[計][數] << " ";/*拉寬*/
		if (++數 >= 維)
		{
			std::cout << std::endl;
			數 = 0;
			計++;
		}
	} while (計 < 維);



輸出倒梯形

	cout << endl;
	int 層(7), 計(7), 數(7);
	do
	{
		if (計 == 7)
			cout << " ";
		if (計 > 數)
			cout << " ";
		else
			cout << "**";
		if (!--計)
		{
			cout << endl;
			計 = 7;
			數--;
			層--;
		}
	} while (層 > 1);
	cout << endl;

按輸入的整數輸出圖形的2種寫法

int 輸入整數(0), 層(8), 數(1), 計(8);
std::cin >> 輸入整數;
層 = 計 = 輸入整數;
do
{
	cout << (計 > 數 ? " " : "* ");
	//cout << (計 > 數 ? " " : "*") << (計 > 數 - 1 ? "" : "*");
	if (!--計)
	{
		cout << endl;
		計 = 輸入整數;
		數++;
		層--;
	}
} while (層);

	int 位(5), 個(1), 數(0), 量(18), 起(0), 轉(1);
	cout << "http://ask.csdn.net/questions/338810 java只用兩個for迴圈輸出N個菱形。請輸入層數:" << endl;
	cin >> 量;
	//do
	//{
	//	cout << ((數 < 位 || 數 >= 位 + 個) ? " " : "*");
	//	if (++數 > 10)
	//	{
	//		cout << endl;
	//		數 = 0;
	//		++起;
	//		位 += 轉 ? -1 : 1;
	//		個 += 轉 ? 2 : -2;
	//	}
	//	if (位 <= 0 && 轉) 轉 = 0;
	//	if (位 >= 5 && !轉) 轉 = 1;
	//} while (起 < 量);
	for (起 = 0; 起 < 量; 起++)
	{
		for (數 = 0; 數 <= 10; 數++)
			cout << ((數 < 位 || 數 >= 位 + 個) ? " " : "*");
		cout << endl;
		位 += 轉 ? -1 : 1;
		個 += 轉 ? 2 : -2;
		if (位 <= 0 && 轉) 轉 = 0;
		if (位 >= 5 && !轉) 轉 = 1;
	}