code.club

 找回密碼
 立即註冊
搜索
查看: 15484|回復: 1

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

[複製鏈接]
發表於 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;
}
回復

使用道具 舉報

 樓主| 發表於 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;
}
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-4-18 11:56 , Processed in 0.108544 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表