输入一个n,表示两个菱形图形(实心和空心)的行数(或者一半行数),利用循环语句实现输出。

题目:

输入一个n,表示两个菱形图形(实心和空心)的行数(或者一半行数),利用循环语句实现输出。

示例输入:

3

示例输出(这里设输入的为菱形的行数):

 *
*****
* **

首先需要明确的是,在这种情况下输入的数字必须是个奇数,不然不构成菱形。
设行数为nnn则总宽度:nnn上半部分的行数(不包括中间一行):n−12\frac{n-1}{2}2n−1​那么第iii行的‘*’个数为:2i−12i-12i−1
因此我们得到第iii行的第一个‘*’和最后一个‘*’的位置为n−(2i−1)2+1=n+12−i+1\frac{n-(2i-1)}{2}+1=\frac{n+1}{2}-i+12n−(2i−1)​+1=2n+1​−i+1和n−n−(2i−1)2=n−12+in-\frac{n-(2i-1)}{2}=\frac{n-1}{2}+in−2n−(2i−1)​=2n−1​+i(每一行从左往右开始数 )

所以上半部分(不包括中间一行):

int n;//总行数
std::cin >> n;
for (int i = 1; i <= (n-1)/2; ++i)//第i行
{for (int j = 1; j <= n; ++j)//第i行第j列{if (j >= (n+1)/2-i+1 && j <= (n-1)/2+i)//如果处于第一个"*"和最后一个"*"之间,就输出"*"std::cout << "*";elsestd::cout << " ";///否则输出空格}std::cout << std::endl;
}

那么下一半怎么办呢?其实我们可以发现第一行和最后一行其实是对称的,我们可以把中间一行看作第0行,那么原本的第一行就变成了第−n−12-\frac{n-1}{2}−2n−1​行,原本的最后一行就变成了第n−12\frac{n-1}{2}2n−1​行,显然它们的绝对值是一样的!
那么第iii行的’*'的个数就是n−2∣i∣n-2|i|n−2∣i∣
那么原本的第i行的第一个“*”和最后一个“*”的位置变为n−(n−2∣i∣)2+1=∣i∣+1\frac{n-(n-2|i|)}{2}+1=|i|+12n−(n−2∣i∣)​+1=∣i∣+1和n−n−(n−2∣i∣)2=n−∣i∣n-\frac{n-(n-2|i|)}{2}=n-|i|n−2n−(n−2∣i∣)​=n−∣i∣

为方便观察,在这里用’+‘代替空格,很容易找出’*'的个数与iii的关系:
最终代码为:

#include<iostream>
#include<cmath>
int main()
{int n;std::cin>>n;for (int i = (1-n)/2; i <= (n-1)/2; i++){for (int j =1; j <=n; j++){if (j >= abs(i)+1 && j <= n-abs(i))std::cout<<"*";elsestd::cout << " ";}    std::cout << std::endl;}
}

空心菱形只须将if语句改为:

if (j == abs(i)+1 || j == n-abs(i))

即可。
另外,如果想输出的更像正方形一样,可以把‘*’改为‘* ’,多加一个空格,另外 else 后也得改为输出两个空格,即" "。

输出实心和空心菱形(C++)相关推荐

  1. c语言打印空心数字图形,(完整word版)C语言编写打印实心和空心菱形【源码】

    <(完整word版)C语言编写打印实心和空心菱形[源码]>由会员分享,可在线阅读,更多相关<(完整word版)C语言编写打印实心和空心菱形[源码](13页珍藏版)>请在人人文库 ...

  2. Java打印实心和空心菱形

    Java打印实心和空心菱形 public static void main(String[] args) {System.out.println("请输入需要打印的菱形行数:"); ...

  3. c语言循环结构菱形九九乘法表,C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表 ....

    //菱形 #include void main() { int i,j; //菱形的上半部分的三角形 for(i=0;i<4;i++) { for(j=3;j>i;j--) { print ...

  4. C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表

    //菱形 #include <stdio.h> void main() {int i,j;//菱形的上半部分的三角形 for(i=0;i<4;i++){for(j=3;j>i; ...

  5. Java打印实心菱形与空心菱形

    由于我已经知道我需要的菱形是什么样,所以我的思路是把菱形分为上下两部分先打印上半部分,再打印下半部分: 实心菱形: 第一个for循环限定菱形的行数,第二个for循环限定打印空格,第三个for循环打印* ...

  6. 2021-11-06 编程打印空心菱形

    编程打印空心菱形 描述 所谓"空心菱形"是指:每行由两端为*.中间为空格的字符串构成,每行的字符串中心对齐:上半部分相邻两行字符串长度差2:下半部分与上半部分对称. 编写程序,输出 ...

  7. 【0702作业】输出两种菱形(实心菱形和空心菱形)

    实心菱形: 1 package com.workprojects; 2 /** 3 * 练习作业 4 * 输出菱形"*" 5 * 2019-07-02 6 * @author L ...

  8. c语言输出边长为n的菱形,[c语言]输入n,分别用*输出边长为n的实心菱形和空心菱形...

    int main(int argc,const char *argv[]){ int n,i,j; scanf("%d",&n); for (i=1; i<=2*n- ...

  9. python菱形_python如何输出菱形与空心菱形详解与巧妙地使用center方法

    首先应该了解菱形在输出时,每一行的组成有哪些规律,并且除了中间的一行,上部分和下半部分应该是对称的 这是一个我们要准备输出的一个菱形的模板 ,一共有7行 7列 我们设菱形上半部分的总行数为rows,当 ...

最新文章

  1. iOS:转载:UIControl的使用
  2. C++中WSAAsyncSelect模型的用法例程
  3. bulk of the 用法_代词的用法详解:第三部分(不定代词)
  4. IPC--进程间通信三(共享内存)
  5. shell脚本的作用
  6. how many fibs java_How many Fibs?(java)
  7. Python清理微信被好友删除的人
  8. SEO网站前端优化整理
  9. 迅雷界面引擎Bolt中编译失败的问题
  10. html如何修改字体黑体,css如何设置黑体样式?
  11. 网络工程师常见面试题,1分钟就能看完
  12. K_A08_004 基于 STM32等单片机驱动MX1919模块按键控制直流电机正反转加减速启停
  13. Golang中AK/SK认证的实现
  14. 基于Dlib模型实现驾驶员疲劳检测项目
  15. macbook pro黑屏没反应无法开机的解决方法
  16. ArcGIS投影坐标系下坐标值转换成地理坐标系经纬度
  17. 嵌入式ARM设计编程(二) 字符串拷贝
  18. 补数的概念和取模运算
  19. Exynos_4412——ADC实验
  20. R安装与卸载、RStudio安装

热门文章

  1. 在Android中使用file对象,Android – 将文件从资产复制到/ data / data文件夹
  2. Common part can be extracted from ‘if‘
  3. 解决flutter The proxy server URL extracted from HTTP_PROXY or HTTPS_PROXY
  4. windows10无法连接到组织网络
  5. 如何使用Python识别图片中的二维码
  6. vivado仿真遇到的问题
  7. 网站建设初期如何做好SEO工作
  8. python遍历数组的两种方法加条件输出数组的值
  9. Premiere Pro之视频添加视频边框(十八)
  10. 关于jquery实现点击a链接,跳转之后,该a链接处样式的修改