c++ - 如何为以下星形图案添加空间?
问题描述
如何打印以下模式?
*
**
***
****
*****
****
***
**
*
我们如何在模式的前半部分添加空格?我只设法使模式的后半部分正确:
#include <iostream>
using namespace std;
void printpattern(int n)
{
for (int r = 0; r <= n; r++)
{
for (int z = 0; z <= r; z++) {
cout << "*";
}
cout << endl;
}
}
int main()
{
int n = 5;
printpattern(n);
}
解决方案
如果一个人害怕使用循环,那么这些东西当然可以通过递归和一点数学来解决:
#include <iostream>
void pattern(int n, int p = 0)
{
if (!n) return;
if (!p) { pattern(2 * n * n - n, n); return; }
int k = --n / p, o = n % p + 1, t = o - (p - k);
std::cout.put(" *"[k >= p && t < p || k < p && t >= 0]);
--o || std::cout.put('\n');
pattern(n, p);
}
推荐阅读
- javascript - 提交时 JavaScript 表单验证时页面重置
- c# - Entity Framework 6 - Uncached data with dependency injection
- reactjs - 为什么我无法在 create-react-app 中初始化 git?
- java - 从 GitHub 转贴:Spring Boot 应用程序无法启动并出现错误“java.lang.NoSuchMethodError
- java - 如何为 BBP 算法做 base 16 来获得 PI
- dart - Dart 中的新功能
- keras - 我需要有状态还是无状态的 LSTM?
- django - 如何从 Django 中的 post 请求中检索数据?
- android - 将 FrameLayout 中的片段与另一个片段进行比较
- laravel - fullcalendar 中的日历未显示