C语言经典编程题 --- 打印菱形

news2024/11/19 17:49:44

目录

一、题目描述

二、普通解法

三、曼哈顿距离解法


一、题目描述

输入一个奇数 n,输出一个由 * 构成的 n 阶实心菱形

输入格式:一个奇数 n。

输出格式:输出一个由 * 构成的 n 阶实心菱形。

输入样例:5

输出样例:
  *  
 *** 
*****
 *** 
  *  

二、普通解法

思路:若要打印第一星,首先就要先打印前6个空格,下面部分也是如此。所以,为了方便打印,我们可以分成上半部分和下半部分,上半部分空格个数由多变少,星个数由少变多;下半部分空格个数逐渐变多,星星个数逐渐变少。

因此假设n = 13,下半部分就是6行,和n的关系也就是n / 2,则上半部分就是 n - 下半部分。然后通过循环来遍历空格和星号就可以了。


对于上半部分的代码如下:

解析都在代码里了

#include <stdio.h>
int main()
{
	int n = 0;
	//输入一个奇数
	scanf("%d", &n);
	int down = n / 2; //上半部分的行数
	int up = n - down; //下半部分的行数

	//打印上半部分
	for (int i = 0; i < up; i++) //控制行
	{
		//打印空格
		//通过规律可以发现是up - 1 - i
		for (int j = 0; j < up - 1 - i; j++)
		{
			printf(" ");
		}

		//打印 *
		//因为*是奇数且递增的,所以也不难发现是2 * i + 1
		for (int j = 0; j < 2 * i + 1; j++)
		{
			printf("*");
		}
		//切记每打完一行都要换行
		printf("\n");
	}

	return 0;
}

我们可以先看看效果:

非常好!!!

接下来弄下半部分

下半部分和上半部分思路一样,关键在于找规律

#include <stdio.h>
int main()
{
	int n = 0;
	//输入一个奇数
	scanf("%d", &n);
	int down = n / 2; //上半部分的行数
	int up = n - down; //下半部分的行数

	

	//打印下半部分
	for (int i = 0; i < down; i++) //控制下半部分的行
	{
		//打印空格
		//空格的个数恰好就是下半部分的行数
		for (int j = 0; j <= i; j++)
		{
			printf(" ");
		}

		//打印 *
		//这个规律也不难发现。它是奇数且递减
		for (int j = 0; j < 2 * (down - i) - 1; j++)
		{
			printf("*");
		}
		//打印完一行别忘记换行
		printf("\n");
	}

	return 0;
}

 看看下半部分结果如何

ok,也是非常的beautiful!!!

最后再把上下部分的代码结合起来

#include <stdio.h>
int main()
{
	int n = 0;
	//输入一个奇数
	scanf("%d", &n);
	int down = n / 2; //上半部分的行数
	int up = n - down; //下半部分的行数

    //打印上半部分
	for (int i = 0; i < up; i++) //控制行
	{
		//打印空格
		//通过规律可以发现是up - 1 - i
		for (int j = 0; j < up - 1 - i; j++)
		{
			printf(" ");
		}

		//打印 *
		//因为*是奇数且递增的,所以也不难发现是2 * i + 1
		for (int j = 0; j < 2 * i + 1; j++)
		{
			printf("*");
		}
		//切记每打完一行都要换行
		printf("\n");
	}

	//打印下半部分
	for (int i = 0; i < down; i++) //控制下半部分的行
	{
		//打印空格
		//空格的个数恰好就是下半部分的行数
		for (int j = 0; j <= i; j++)
		{
			printf(" ");
		}

		//打印 *
		//这个规律也不难发现。它是奇数且递减
		for (int j = 0; j < 2 * (down - i) - 1; j++)
		{
			printf("*");
		}
		//打印完一行别忘记换行
		printf("\n");
	}

	return 0;
}

程序运行结果:

显然非常符号我们的预期!!! 

三、曼哈顿距离解法

什么是曼哈顿距离呢?

一个点到中心单元的距离被称为曼哈顿距离
在二维空间中 i, j 两点的曼哈顿距离可以表示为 d(i,j)=|xi−xj|+|yi−yj|(横、纵坐标差值的绝对值之和)。

 什么意思呢?接下来我举一个例子

假设我要打印一个n = 5的菱形

眼尖的同学已经发现,只要曼哈顿距离小于等于2的就是星星,大于2的就是空格! 

接下来我们就要找n和它们的关系

中心坐标的坐标是(2,2),也就是center_x = n / 2,center_y = n / 2

同样的,只要曼哈顿距离小于等于2的就是星星,也就是只要距离是小于等于n / 2的就是星星,否则就是空格


代码实现:

#include <stdio.h>
int main()
{
	int n = 0;
	//输入一个奇数
	scanf("%d", &n);
	
	//求出中心点的坐标
	int center_x = n / 2;
	int center_y = n / 2;

	//其实就是n行n列的二维数组
	for (int i = 0; i < n; i++) //遍历行
	{
		for (int j = 0; j < n; j++) //遍历列
		{
			//abs函数返回的是两个数的绝对值
			if (abs(i - center_x) + abs(j - center_y) <= n / 2)
			{
				printf("*");
			}
			else
			{
				printf(" ");
			}
		}
		//打印完一行别忘了换行
		printf("\n");
	}
	return 0;
}

程序结果:

非常的beautiful!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统】生产环境消失的进程如何排查

文章目录1.生产环境问题描述2.Linux软件环境准备3.编译运行程序&#xff0c;分析现象4.进程消失原因分析5.生产类似进程消失的案例6.如何通过日志查看消失进程1.生产环境问题描述 一台机器上的某个进程直接就消失了&#xff0c;别的机器上的服务都正常跑着&#xff0c;怎么排查…

AI城管占道经营识别检测算法 yolo

AI城管占道经营识别检测算法通过yolopython深度学习训练框架模型对道路街区小摊贩占道经营违规摆摊行为进行检测&#xff0c;检测有出店经营占道经营违规摆摊情况&#xff0c;yolopython深度学习训练框架模型会立即抓拍存档。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是…

重学ElasticSearch (ES) :ELK搭建SpringBoot日志实时分析系统

一、概述 在一个大型的分布式架构的项目里&#xff0c;不同的服务模块部署在不同的服务器上&#xff0c;如果想要定位问题&#xff0c;可能需要去不同的服务器上查看不同服务的日志。 那么&#xff0c;ELK可以很方便的把日志集成到一起&#xff0c;无须再去各个服务器上的日志中…

Python自带的常数scipy.constants

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】Python自带的常数scipy.constants[太阳]选择题以下python代码结果错误的一项是?from scipy import constants print(【圆周率constants.pi】,constants.pi)print(【时间单位constants.minute】…

[实例讲解]计算机处理任务的方法和原理--线程

[实例讲解]计算机处理任务的方法和原理 文章目录[实例讲解]计算机处理任务的方法和原理情景一 所有的事情自己做情景二 找人去帮忙处理打印情景三 分别找人处理编码和打印情景四 不特定指定人去帮忙结束语在学习和工作中&#xff0c;我们自己都需要做很多的事情&#xff0c;事情…

【机器学习】匈牙利和KM匹配个人理解

基础知识 二分图 【定义】图论中的一种特殊模型。若能将无向图G(V,E)的顶点V划分为两个交集为空的顶点集&#xff0c;并且任意边的两个端点都分属于两个集合&#xff0c;则称图G为一个为二分图。 【解释】一张图要是二分图&#xff0c;需要满足以下几个要求&#xff1a; &a…

PS 矩形选区工具(2)模式快捷键 选区比例调整 颜色填充

本文为PS 矩形选区工具(1)基本用法 生成图层 选区方式演示讲解的续文 拉出选区后 用鼠标拖动选区 是可以拖动选区位置的 拉出一块选区是 按住键盘 Shift键 就可以用鼠标再拖出一块选区 加选区快捷键 按住 Shift 减选区 按住键盘 Alt 键 用鼠标拖出不要的选区位置即可 减选…

新认定金山区企业技术中心给予一次性奖励15万元

金山区企业技术中心一、主管部门金山区经济委员会二、政策依据《金山区关于深化建设打响“上海制造”品牌的重要承载区促进实体经济高质量发展的若干政策》&#xff08;金府发〔2019〕8号&#xff09;《印发<关于深化建设打响“上海制造”品牌的重要承载区促进实体经济高质量…

衣服、商品、商城网站模板首页,仿U袋网,vue+elementui简洁实现(三)

一.以往版本回顾 作者成品效果访问&#xff1a;点击访问 官方详情页访问&#xff1a;点击访问 版本1《衣服、商品、商城网站模板首页&#xff0c;仿U袋网&#xff0c;vueelementui简洁实现》版本2《衣服、商品、商城网站模板首页&#xff0c;仿U袋网&#xff0c;vueelementui…

【微服务】springboot 实现elasticsearch索引数据迁移

一、前言 在生产系统中&#xff0c;经常可能面临的一个状况就是&#xff0c;随着实际业务发生变更&#xff0c;现有的数据模型可能需要调整&#xff0c;而且到了必须调整不可的时候&#xff0c;那就只能硬着头皮做了&#xff1b; 数据模型的调整&#xff0c;说的大一点&#xf…

flask 和 echarts 使用柱状图折线图等可视化图表展示二手房统计数据

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据处理 flask web 框架 echarts 图表 jinja 模版 三、菜鸟实战 初始化 Flask 框架&#xff0c;设置路由 各行政区房屋均价柱状图分析 echarts 渲染柱状图 各面积区间房屋占比饼状图 echa…

逻辑漏洞渗透与攻防(六)之其他类型逻辑漏洞

目录 其他类型逻辑漏洞 数据包重放漏洞 条件竞争漏洞 订单金额任意修改 接口无限制枚举 支付漏洞 修改商品数量 修改支付状态 修改附属值 越权支付 无限制试用 支付漏洞总结 SRC中的逻辑漏洞总结 其他类型逻辑漏洞 数据包重放漏洞 漏洞介绍&#xff1a;通…

SpringBoot下RabbitMQ的实战应用:动态创建和动态监控队列、死信、备份交换机

一、应用场景 业务中心根据业务需求向特定用户发送消息&#xff1b;发送前不确定由哪个用户接收 特定用户接收特定消息&#xff1b;用户可以退出&#xff0c;再切换别的用户登录&#xff0c;用户登录后只接收与自已对应的消息 二、总体要求 项目要足够稳健&#xff0c;消息不能…

(3分钟了解)SLAM后端优化的四大金刚!g2o ceres gtsam SE-Sync

后端优化常用的库有g2o ceres gtsam 和 se-sync这篇博客首先介绍se-sync&#xff0c;然后比较四种库之间的差异。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…

Python实现检测图片中的人脸,将识别到的人脸向量存入数据库,并实现提交的图片的人脸信息与入库的人脸信息进行比对

facenet_face_regonistant 完整代码下载地址&#xff1a;Python实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库 利用facenet实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库&#xff0c;此外利用post提交一个新图片&#xff08;也可以提交一个…

【Qt】通过继承ui界面类的方式加载.ui转化的.h头文件显示窗体

【Qt】通过继承ui界面类的方式加载.ui转化的.h头文件显示窗体1、背景2、实例3、验证1、背景 将.ui文件转化为.h头文件参考如下博客&#xff1a; 【Qt】将QtDesigner生成的.ui文件转化为.h头文件 https://jn10010537.blog.csdn.net/article/details/128589666其中生成的ui_wid…

Web学习

Web概念JavaWeb&#xff1a;使用Java语言开发基于互联网小贷项目软件架构&#xff1a;B/S架构详解静态资源HTML举例标签学习文件标签<!--注释-->文本标签图片标签* img&#xff1a;展示图片* 属性&#xff1a;* src&#xff1a;指定图片的位置* 代码&#xff1a;<!--展…

你的PC机或者终端,是怎么上网的?怎么连接到网络的?无线网怎么接入Internet,如何访问网络资源?

你的PC机或者终端&#xff0c;是怎么上网的&#xff1f;怎么连接到网络的&#xff1f;无线网怎么接入Internet&#xff0c;如何访问网络资源&#xff1f; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都…

就该去造空调吗?

今天在知乎上收到一个网友的提问&#xff1a;大佬&#xff0c;我想咨询点人生问题&#xff0c;但是碍于没工作囊中羞涩&#xff0c;实在没钱问。希望能问一问人生选择问题 是这样的一个是奥克斯空调电控部&#xff0c;一个是大陆汽车电子重庆研发&#xff0c;奥克斯偏裸机&…

光耦合器:其类型和在DC/AC电路中的各种应用

光耦合器&#xff1a;其类型和在DC/AC电路中的各种应用 介绍 光耦合器是一种在两个隔离电路之间传输电信号的电子元件。光耦合器也称为光隔离器、光电耦合器或光隔离器。 光耦合器通常用于电路&#xff0c;尤其是低电压或高噪声敏感电路&#xff0c;用于隔离电路&#xff0c…