大学C++留的第一次作业,本来要求只需要画三个三角形,我觉得太无聊于是多写了一点,用户可以自己设置每个三角形的行数和最终输出几个三角形。
时间有限,代码里的有注释就不作详细说明了。
//生成*三角形的本质是输出一个由空格和*组成的方阵
//假设共有row行当前为第i行,则最后一行有1+2*(row-1)个*
//先输出(num-1)/2 -(i-1)个空格
//再输出1+2(i-1)个*
//如果想生成多个三角形,则先输出左侧空格和第一块三角形
//再根据整体行数决定输出空格和*三角形的次数,注意边角重复的点要删除
#include <iostream>
using namespace std;
void star(int row, int num);
int main()
{
int num, row;
cout << "请输入每个三角形图案您想生成的行数:";
cin >> row;
cout << "请输入您想生成几层三角形图案:";
cin >> num;
star(row, num);
cin.get();
cin.get();
return 0;
}
void star(int row, int num)
{
int count = num * row, time = 1, add = 0; //time统计该运行几次* 空格,add统计小三角形运行到第几行
for (int i = 1;i <= count;i++) //最外层循环,控制整体行数
{
for (int j = 1;j <= num * (row - 1) - add - (time - 1) * (row - 1);j++) //控制空格,每层递减
{
cout << " ";
}
for (int j = 1;j <= 1 + 2 * add;j++)
{
cout << "*";
}
for (int sum = 1;sum < time;sum++) //控制空格和*三角形的输出次数
{ //控制空格三角形的输出
for (int j = 2 * row - 3 - 2 * add;j >= 1;j--)
{
cout << " ";
}
//控制*三角形的输出
if (add + 1 == row)
{
for (int j = 1;j <= 2 * add;j++)
{
cout << "*";
}
}
else
{
for (int j = 1;j <= 1 + 2 * add;j++)
{
cout << "*";
}
}
}
add++;
if (add == row && time <= num)
{
time += 1;
add = 0;
}
cout << endl;
}
}