控制檯文字矩陣、菱形排列(充分展示用邏輯替代內迴圈的處理技巧)
阿新 • • 發佈:2019-02-06
那個矩陣排列確費不少腦力哦,菱形用陣列倒序填,這些例子都是給初學參考。
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;
}