iT邦幫忙

1

C# For迴圈 列印正反三角形

c#
  • 分享至 

  • xImage

題目:列印下列圖示

*        *****
**        ****
***         **
****         *
*****

目前我只能做到兩邊都是對等的 請問我該怎麼解這題?

            for (int num1 = 1; num1 <= 5; num1++) {
                for (int num2 = 1; num2 <= num1; num2++) {
                    textBox2.AppendText("*");
                }
                textBox2.AppendText("\r");
                for (int num3 = 5; num3 >= num1; num3--) {
                    textBox2.AppendText("*");
                }
                textBox2.AppendText("\r\n");
            }

這樣可以成功 可是覺得寫得很不好...

            for (int num1 = 1,row = 1; num1 <= 5; num1++, row++) {
                for (int num2 = 1; num2 <= num1; num2++) {
                    textBox2.AppendText("*");
                }
                textBox2.AppendText("\r");
                if (row >= 3) {
                    textBox2.AppendText("  ");
                    num1++;
                }
                for (int num3 = 5; num3 >= num1; num3--) {

                    textBox2.AppendText("*");
                }
                if (row >= 3)
                {
                    num1--;
                }
                textBox2.AppendText("\r\n");
            }
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
japhenchen
iT邦超人 1 級 ‧ 2023-02-06 07:42:28

這是chatGPT回答的
https://ithelp.ithome.com.tw/upload/images/20230206/201179544H1RrwbjBj.jpg

using System;

namespace TriangleExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Forward Triangle:");
            for (int i = 1; i <= 5; i++)
            {
                for (int j = 1; j <= i; j++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }

            Console.WriteLine("\nReverse Triangle:");
            for (int i = 5; i >= 1; i--)
            {
                for (int j = 1; j <= i; j++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
        }
    }
}

https://ithelp.ithome.com.tw/upload/images/20230206/20117954PZOTbB2EUg.jpg

看更多先前的回應...收起先前的回應...

感謝你的回應 可是我要的不是完全對稱的

*        *****
**        ****
***         **
****         *
*****

是像這樣的
我看不出來他遞減那邊是可以單純用FOR迴圈即可 還是跟我一樣用條件硬算的

有個東西叫"定位",C#裡叫 Console.SetCursorPosition

static void Main(string[] args)
        {
            for (int y = 0; y < 5; y++)
            {
                for (int c = 0; c <= y; c++)
                {
                    Console.SetCursorPosition(c+1, y+1);
                    Console.Write("*");
                }
                for (int c = 5-y; c >= 1; c--)
                {
                    Console.SetCursorPosition(15-c, y+1);
                    Console.Write("*");
                }
            }
            Console.ReadKey();
        }

輸出結果


 *        *****
 **        ****
 ***        ***
 ****        **
 *****        *

你要會變通啊,不然以後出社會走這行路會卡住

其實我主要的疑惑點是 右邊的圖形 我看不出來他的規律是什麼
可是也是謝謝你 "定位"這塊 我之前倒是沒碰過 我的方式是我的PO的第一段code 我是把它當列印一樣 一行一行去做處理

*****
****
**
*
1
讓我靜靜...
iT邦新手 5 級 ‧ 2023-02-06 09:12:00

javascript的寫法給你參考~

let str = "*";
let lat = "";
for(let i = 0; i < 5; i++){
    lat = "        "
    for(let j = 5-i; j > 0; j--){
        lat += "*"
    }
    console.log(str+lat)
    str += "*";
}

感謝你的回應 可是我要的不是完全對稱的是像這樣的

*        *****
**        ****
***         **
****         *
*****

比起不完全對稱更像是對稱後替換字,右側在第三行之後都會將第一個字換成空白,可以試試加上布林作替換依據
寫法同上,加一個確認i是不是到第三行的布林&替換文字用的布林即可

let str = "*";
let lat = "";
let firstCheck = false;
let changeCheck = false;
for(let i = 0; i < 5; i++){
    lat = "        "
    for(let j = 5-i; j > 0; j--){
        if(i >= 2) firstCheck = true;
        if(firstCheck && !changeCheck) {
            lat += " ";
            changeCheck = true;
        }else lat += "*"
    }
    firstCheck = false;
    changeCheck = false;
    console.log(str+lat)
    str += "*";
}
0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-09 09:15:53

純粹使用FOR迴圈

for (int y = 0; y < 5; y++)
{
    //正三角形*
    for (int c = 0; c <= y; c++)
    {
        Console.Write("*");
    }

    //隱藏反三角形
    for (int c = 5 - y; c > 1; c--)
    {
        Console.Write(" ");
    }

    //隱藏正三角形
    for (int c = 0; c <= y; c++)
    {
        Console.Write(" ");
    }

    //反三角形*
    for (int c = 5 - y; c > 0; c--)
    {
        Console.Write("*");
    }
    Console.WriteLine();
}
Console.ReadKey();

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20230209/20152569XqhBPFrKh2.jpg

隱藏三角形說的是這個...請參考我小畫家畫的圖
https://ithelp.ithome.com.tw/upload/images/20230209/20152569sJCPAMRDMM.png

*****
****
**
*

其實我主要的疑惑點是這個 我看不出規律..

我要發表回答

立即登入回答