code.club
標題:
輸入一正數,用*號印出倒的正三角形
[打印本頁]
作者:
enter
時間:
2015-10-9 01:45
標題:
輸入一正數,用*號印出倒的正三角形
#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
加強版,先印出倒三角再接著正三角,成為沙漏形狀。
#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;
}
歡迎光臨 code.club (https://code.club/)
Powered by Discuz! X3.2