题目介绍
要先输入菱形的层数再得到菱形
使用for循环来打印菱形如下图:
想一想:
大家可以自己想一想如何使用单个for循环嵌套来实现此代码。
通过实现先单调递增后单调递减来解决双层for嵌套的问题。
给个小提示:abs() 或者 if else
注意:要先了解双层for嵌套解法再来了解本文章将会得到更好的领悟。
在此声明此代码非我想到的我只是发布者,真正的作者是zw。
上代码:
方法一:
//zw
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=n/2-abs(n/2-i);j<n/2;j++)
cout<<" ";
for(int j=2*abs(n/2-i);j<n;j++)
cout<<"* ";
cout<<endl;
}
}
运行截图:
哈哈,我是才发现还能到这样写,真是妙不可言呐。
方法二:
#include <iostream>
#include <cmath>
int main() {
int n, i, j;
std::cout << "请输入菱形的行数:";
std::cin >> n;
// 打印上半部分和下半部分的菱形
for (i = 1; i <= n ; i++) {
int numStars = (i <= n/2 + 1) ? 2*i - 1 : 2*n - 2*i + 1; // 计算每行星号的数量
int numSpaces = n - numStars/2 + 2; // 计算每行空格的数量
// 打印空格
for (j = 1; j <= numSpaces; j++) {
std::cout << " ";
}
// 打印星号
for (j = 1; j <= numStars; j++) {
std::cout << "* ";
}
std::cout << std::endl;
}
return 0;
}