enter 發表於 2015-10-9 01:45:19

輸入一正數,用*號印出倒的正三角形

#include <iostream>
using namespace std;

int main(){

int n,i,j,k;

cin>>n;//輸入一個整數

for(i=n;i>0;i--)
{
if(i<n)//如果i小於n表示從第二行開始,要先輸出一個空白
   {
   for(k=0;k<(n-i);k++)//用k來計數,k依序遞增,但遞增的條件是n-i,因為i在遞減,和n的差距愈來愈大
      cout<<" ";//印出空白
   }
for(j=(2*i-1);j>0;j--)//然後印出*號,每排剛好是2倍的n減去1
      cout<<'*';
   
cout<<endl;//然後印出換行,再從第i-1的次數開始整個迴圈
   
}


return 0;
}

enter 發表於 2015-10-9 16:18:05

加強版,先印出倒三角再接著正三角,成為沙漏形狀。


#include <iostream>
using namespace std;

int main(){
       
        int n,i,j,k;
       
        cin>>n;
       
        for(i=n;i>0;i--)
        {
                if(i<n) // 若i==n時,是為第一列,不印出空格,所以設定從 i<n 時開始出現空格
                for(k=0;k<n-i;k++) //空格為每列遞增,遞增的數目由全列數減餘列數決定 n-i,例如第二列應是 n減掉剩餘列數 i,即5-4=1 個空格。
                {
                        cout<<' ';
                }
                for(j=2*i-1;j>0;j--)// j從2*i(一開始 i==n)-1起始,遞減列印。
                {
                        cout<<'*';
                }
                if(i==0) break;// 一旦 i已減到0時,就不要再進行下面的換新行,好銜接下一個函數的正三角。
                cout<<endl;
               
}


   for(i=2;i<=n;i++) //i從2開始,則會省略掉只印一個 * 號的第一列 。而且要i<=n,如果只是 i<n 則最後會少印一列。
        {
       for(k=0;k<n-i;k++) // 空格為每列遞減,遞減的數目由全列數減現列數 n-i,和上例的 i 為剩餘列數不同,所以空格會愈來愈少。
       cout<<' ';
       for(j=0;j<2*i-1;j++) // 因為 i是現列數,由少變多,所以 * 號也因 i 的增加而遞增,而上例 i 一開始就是 n,所以i--就是表示剩餘列數。
          cout<<'*';
       cout<<endl;
   }

return 0;
}
頁: [1]
查看完整版本: 輸入一正數,用*號印出倒的正三角形