1. 程式人生 > >C++第7周任務3-輸出星號圖詳解示例

C++第7周任務3-輸出星號圖詳解示例

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

  任務要求見http://blog.csdn.net/sxhelijian/article/details/8045279,本文以輸出下面的星號圖為例,再次體會“自頂向下,逐步求精”的設計過程。

  要輸出的星號圖是:

  

  將一個圖,看作為6行,完成了第一級的分解,提到的演算法框架為:

i=1;While(i<=6)  //需要輸出6行{  輸出第i行;  換行;  ++i;}

  對於“輸出第i 行”的任務,可以進行細化:

先輸出若干空格(多少個空格?第1行0個,第2行1個,第3行2……第6行5個);再輸出若干個星號(多少星號?第一行11個,第2行9個……第6行1個)

  其實把空格數和星號數和表示行數的變數 i  掛起鉤來,上面的“若干個”可以用  表示出來,簡單地做些推算可以寫出式子。

  對於“輸出第i行”的任務,可以進行細化:

先輸出 i-1 個空格; 再輸出 2*(6-i)+1 個星號; 

  於是,演算法就是:

i=1;While(i<=6)  //需要輸出6行{  //輸出第i行  先輸出 i-1 個空格;   再輸出 2*(6-i)+1 個星號;   換行;  ++i;}

  將輸出若干個空格/星號等寫成程式碼,得到了下面的程式碼

//參考解答一#include <iostream>using namespace std;int main( ){ int i,j; i=1; while(i<=6)  //需要輸出6行 {  //輸出第i行  for(j=1; j<=i-1; ++j)   cout<<" ";  for(j=1; j<=2*(6-i)+1; ++j)   cout<<"*";  cout<<endl;  ++i; } return 0;}


  下面給出程式的另一種寫法,其中引入了兩個變化:(1)三角的行數可以由變數n控制;(2)最外層控制輸出n行的迴圈改為了for迴圈,實際上,內層的迴圈用while也無不可。

//參考解答二#include <iostream>using namespace std;int main( ){ int i,j,n=15; //用n來靈活對待可能的行數 for(i=1;i<=n;++i)  //將上一種解法中的while迴圈改造為for迴圈 {  //輸出第i行  for(j=1; j<=i-1; ++j) //內層的這個for迴圈可以寫作while迴圈   cout<<" ";  for(j=1; j<=2*(n-i)+1; ++j) //這兒也可以用其他迴圈,可嘗試改造   cout<<"*";  cout<<endl; } return 0;}

  下面的程式採用的是讓控制迴圈的變數由大變小(與三角上大下小呼應)的思路,相應地,只需要改變控制空格數和星號數的式子即可

//參考解答三#include <iostream>using namespace std;int main( ){ int i,j,n=6;  for(i=n;i>=1;--i) //i由大變小 {  //輸出第i行  for(j=1; j<=n-i; ++j) //關鍵:輸出的是n-i個空格   cout<<" ";  for(j=1; j<=2*i-1; ++j) //關鍵:輸出的是2*i-1個星號   cout<<"*";  cout<<endl; } return 0;}

  其他的星號圖,思路類似,相信同學們可以獨立做出來。


  

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述