關(guān)于用C#輸出實心棱形與空心棱形的幾個方法

在學(xué)習(xí)C#過程中,擁有一個良好的數(shù)學(xué)思維邏輯能力能極大的提升你學(xué)習(xí)C#的速度
題目:
(****)輸入n,分別用*輸出邊長為n的實心菱形和空心菱形。
例如:n = 3時,輸出:



方法1:

int n;
Console.WriteLine ("請輸入一個數(shù)n:");
n = int.Parse (Console.ReadLine ());
//輸入實心棱形。
for (int i = 1; i <= n; i++) {
//輸入前面的空格數(shù)量
  for (int k = 1; k <= n - i; k++) {
    Console.Write (" ");
  }
//輸入星號
  for (int j = 1; j <= i; j++) {
    Console.Write ("*");
  }
//輸入后面剩余的星號
  for (int j = 2; j <= i; j++) {
    Console.Write ("*");
  }
//換行
  Console.WriteLine ();
}
//倒著輸入星號,從多到少
for (int i = n; i > 0; i--) {
  for (int k = 1; k <= n - i + 1; k++) {
    Console.Write (" ");
  }
  for (int j = 2; j <= i; j++) {
    Console.Write ("*");
  }
  for (int j = 3; j <= i; j++) {
    Console.Write ("*");
  }
Console.WriteLine ();
}
//輸入空心棱形
for (int i = 1; i <= n; i++) {
  for (int k = 1; k <= n - i; k++) {
//輸入前面的空格
    Console.Write (" ");
  }
//輸入星號,并判斷是否在棱形的邊或者點上
  for (int j = 1; j <= i; j++) {
    if (j == 1) {
      Console.Write ("*");
      } else {
    Console.Write (" ");
      }
  }
  for (int j = 2; j <= i; j++) {
    if (j == i) {
      Console.Write ("*");
    } else {
      Console.Write (" ");
    }
  }
Console.WriteLine ();
}
//倒著輸入星號。
for (int i = n; i > 0; i--) {
    for (int k = 1; k <= n - i + 1; k++) {
      Console.Write (" ");
    }
    for (int j = 2; j <= i; j++) {
      if (j == 2) {
        Console.Write ("*");
      } else {
      Console.Write (" ");
      }
    }
    for (int j = 3; j <= i; j++) {
      if (j == i) {
        Console.Write ("*");
      } else {
        Console.Write (" ");
      }
    }
  Console.WriteLine ();
}

可以看出在用方法1去描繪這個圖形時,非常麻煩,并且具有很大的局限性。
如果將這個題轉(zhuǎn)換成數(shù)學(xué)題,再去解答的話就會簡單很多。
方法2:
//輸入實心棱形

for (int y = 1; y <= 2*n-1; y++) {
    for (int x = 1; x <= 2*n-1; x++) {
      //在①②③④ 4個線段內(nèi),則輸出星號,否則打印空格
      if(y>=(-x+n+1)&&y<=(x+n-1)&&y>=(x+1-n)&&y<=(-x+3*n-1)){
        Console.Write("*");
      }else Console.Write(" ");
    }
  Console.WriteLine ();
}
Console.WriteLine ();
//輸入空心棱形
for (int y = 1; y <= 2*n-1; y++) {
  for (int x = 1; x <= 2*n-1; x++) {
    //在①②③④ 4個線段上,則輸出星號,否則打印空格
    if(y==(-x+n+1)||y==(x+n-1)||y==(x+1-n)||y==(-x+3*n-1)){
      Console.Write("*");//a[y][x];
    }else Console.Write(" ");
  }
  Console.WriteLine ();
}

首先我們將根據(jù)題目建立出如下的坐標(biāo)軸。

要求我們繪制出實心棱形,那么就是要我們畫出坐標(biāo)軸中 藍(lán)色部分的棱形。
其中 左頂點為(1,n),下頂點為(n,1)
根據(jù)坐標(biāo)我們得出 線段①的方程式為 y=x+n-1
②為 y= -x + 3n-1
③為y= -x + n+1
④為y=x+ 1-n
那么 下面就是輸出符合條件的方程的解就是空心棱形,符合在4個線段內(nèi)的解就是實心棱形
另外還有一種方式,是用絕對值來判斷是否在棱形邊上,這個就你們自己去思考吧。


















for (int i = 0; i < 2*n-1; i++) {
    for (int j = 0; j<2*n-1-Math.Abs(n-i-1); j++) {
        if(j==Math.Abs(n-i-1)||j==(2*n-2-Math.Abs(n-i-1)))
            Console.Write ("*");
        else
            Console.Write (" ");
    }
                Console.WriteLine ();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • sì 支zhī茶chá 對duì 酒jiǔ,賦fù 對duì 詩shī,燕yàn子zi 對duì 鶯yīng 兒é...
    每個人的孟母堂閱讀 1,440評論 0 6
  • 一年級語文上冊生字表 生字表一(共400字) 啊(ā)愛(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang閱讀 3,153評論 0 6
  • 2.6 原語和頂點 在GL中,幾何圖形通過指定一系列的屬性來畫出,這些屬性需要設(shè)置頂點數(shù)組(2.8部分)。有七種幾...
    高小凍閱讀 624評論 0 0
  • 想把深情做樁樁往事, 每一件都有你的歡喜。 天空飄落雪花翩躚舞起, 攜手漫步徜徉秋波彼此。 你說砌一個月球, 我說...
    敗翁閱讀 155評論 0 0
  • 故事 2001年十月,蘋果公司發(fā)布了數(shù)碼音樂播放器iPod,當(dāng)時的我漫不經(jīng)心地把它當(dāng)成了一個雷同產(chǎn)品,因為我已經(jīng)有...
    睡障閱讀 755評論 3 1

友情鏈接更多精彩內(nèi)容