原題來自菜鳥教程
C++ 執行個體 - 建立各類三角形圖案
文章目錄
- 1.*組成的直角三角形
- 2.數字組成的三角形
- 3.字母組成的三角形
- 4.列印*組成的倒三角
- 5.列印數字組成的倒三角形
- 6.*構成的金字塔型正三角形(近似)
- 7.數字構成的金字塔
- 8.*建構倒金字塔
1.*組成的直角三角形
預期效果
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcugjM5EDNzUTM1IzMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i<=rows; i++){
for (int j=1; j<=i; j++){
cout << "*";
}
cout << endl;
// cout << "\n";别忘了轉義符的換行方法啊~
}
}
2.數字組成的三角形
同理~
稍微改一下輸出即可 原理相同~
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i<=rows; i++){
for (int j=1; j<=i; j++){
cout << j << " ";//稍微改一下輸出即可 原理相同~
}
cout << endl;
// cout << "\n";别忘了轉義符的換行方法啊~
}
}
3.字母組成的三角形
#include<iostream>
using namespace std;
int main()
{
char input,alphabet = 'A';
cout << "請輸入最後一個大寫字母:";
cin >> input;
for (int i=1; i<=(input - 'A' + 1); i++){
for (int j=1; j<=i; j++){
cout << alphabet << " ";
}
alphabet ++;
cout << endl;
// cout << "\n";别忘了轉義符的換行方法啊~
}
}
4.列印*組成的倒三角
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=rows; i>=1; i--){
for (int j=i; j>=1; j--){
cout << "*";
}
cout << endl;
// cout << "\n";别忘了轉義符的換行方法啊~
}
}
5.列印數字組成的倒三角形
6.*構成的金字塔型正三角形(近似)
到了這裡終于是上了一些難度~
難度在于——把空間空出來~
這個還算簡單 重點就是把每行第一個星号之前的位置空出來~
本人解法——代碼如下:
#include<iostream>
using namespace std;
int main()
{
int space, rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i <= rows; i++){
for (space = 1; space <= rows - i; space++){
// 第一行打 rows-1 個空格
// 最後一行無空格
cout << " ";
}
for(int k = 0; k <= 2*i - 1 ;k++){
cout << "* ";
k++;
}
cout << endl;
// cout << "\n";别忘了轉義符的換行方法啊~
}
return 0;
}
這裡菜鳥教程給出了一個很有意思的方法:
在列印金字塔的組成部分——“*”時
用了一個巧妙的while循環 列印出每層的 星号
搭配上外層for循環末尾k值的清零
完整代碼如下:
#include<iostream>
using namespace std;
int main()
{
int space, rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1,k=0; i <= rows; i++,k=0){
// 每次循環結束 k清0 ~~
for (space = 1; space <= rows - i; space++){
cout << " ";
}
while(k != 2*i-1)
{
cout << "* ";
++k;
}
cout << endl;
}
return 0;
}
7.數字構成的金字塔
完整代碼如下:
#include<iostream>
using namespace std;
int main()
{
int rows, count = 0, count1 = 0, k = 0;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=1; i <= rows; ++i){
for (int space = 1; space <= rows - i; ++space){
cout << " ";
++count;
}
while(k != 2*i-1)
{
if(count <= rows-1)
{
cout << i+k <<" ";
++count;
}
else{
++count1;
cout << i+k-2*count1 <<" ";
}
++k;
}
count1 = count = k = 0;
//将count值 k值清零
cout << endl;
}
return 0;
}
難度更新 因為要輸出的不止是單調的星号*
而是需要輸出這樣對稱的數字
是以在while循環中 需要分情況
8.*建構倒金字塔
效果如下:
代碼如下:
#include<iostream>
using namespace std;
int main()
{
int rows;
cout << "please input how many rows do you want to print:";
cin >> rows;
for (int i=rows; i >=1; --i){
for (int space = 0; space < rows - i; ++space)
cout << " ";
for (int j=i; j<= 2*i-1; ++j)
cout << "* ";
for (int j = 0; j<i-1; ++j)
cout << "* ";
cout << endl;
}
return 0;
}