C++打印实心菱形
作者:互联网
问题描述:
打印 n 阶实心菱形
输入描述:
输入一个整数n,0 < n <= 10
输出描述:
输出 n 阶实心菱形 , 占 2*n-1 行
示例:
样例输入 样例输出
3 *
***
*****
***
*
法1:暴力破解法
(1)菱形可以看做是由4条边围成的图形,中学简单的线性规划可以用来解决这里的问题;
(2)但有所区别的是:在线性规划中,我们知道图形区域是连续的;而在这里的问题,打印出来的“*”是离散的;所以我们用n×n个字符来表示,调用两次for循环,满足条件即可输出。
(3)4条直线分别是:j=i+n,j=n-i,j=i-n,j=3n-i
只需满足:j<i+n,j>n-i,j>i-n,j<3n-i即可
这里是离散输出,不需要取等号。
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
//1、先打印2*n-1行
//2、每行*由列数共同决定
for (int i = 1; i <= 2 * n - 1; i++)
{
for (int j = 1; j <= 2 * n - 1; j++)
{
if (j<i + n && j>n - i && j<3 * n - i && j>i - n)
cout << "*";
else
cout << " ";
}
cout << endl;
}
system("pause");
return 0;
}
法2:
可以把图形分成上下两段,来分析行数与打印出来的空格及号之间的联系:上半段区间为1-—num;下半段区间为num+1—2num-1,为了方便计数转化为1—num-1
以下为不完全归纳法归纳:
以下为代码实现:
#include<iostream>
using namespace std;
int main()
{
int num = 0;
cin >> num;
for (int i = 1; i <= num; i++)
{
for (int j = 1; j <= num - i; j++)
{
cout << " ";
}
for (int k = 1; k <= 2 * i - 1; k++)
{
cout << "*";
}
cout << endl;
}
for (int i = 1; i <= num - 1; i++)
{
for (int j = 1; j <= i; j++)
{
cout << " ";
}
for (int k = 1; k <= 2 * (num - i) - 1; k++)
{
cout << "*";
}
cout << endl;
}
system("pause");
return 0;
}
标签:输出,cout,int,打印,C++,num,菱形,实心 来源: https://blog.csdn.net/LyneCate/article/details/112987444