注:本人CS系大学生。C之前有接触过但基本忘得差不多了,目前在重新学习C。
今天看到个题目,说是用C的for循环语句打印一个图示的实心菱形:
对别人来说很简单,但对于我这个刚刚认识完循环语句的新手来说很难。光是想就想了很久很久,终于想出来了。写这篇博客一是将自己的思路存档供日后查看,二是把我的思路分享给大家,希望对同样是学习路上的大家有所帮助。完整源码在文末。
题目要求打印的效果是菱形,但实际上我们可以构造一个7*7的正方形。只不过菱形的组成部分用星号来表示,而空白部分则用表示。这里以一个7*7的菱形为例:
空白效果:
实际效果:
那第一步思路就清晰地出来了,使用两个for语句来生成空白的正方形:
之后我们先让它们生成只有空格的7x7的正方形。为了方便识别,这里空格用"?"代替。
生成的效果如下:
成功生成正方形之后,接下来思考如何在这个正方形之中来画出所需要的实心菱形。
再来观察一下应该得到的图形的样子:
想要在这个正方形内画出菱形,就要确认组成菱形的每一个星号所在的位置。
你会发现每一行至少都会有一个星号,而且最中间的列一定会有一个星号。 那么其余的星号也一定与这个中间列的星号有关。我们将这个中间列的星号定义为int mid = coloum/2+1,即中位数。
只要找到了星号位置的变化规律,代码的思路就出来了。
(注意:在C中对整数进行除运算时会向下取整。想要获得之中位数的话,需要在原来的值上+1)
从第4行看起,第1、第2、第3、第4行的星号数量都是呈金字塔状递增的;而第5、第6、第7行的星号数量呈金字塔状递减。那么说明在不同行之间,星号的变化规律并不完全一样。所以我们需要把行数分割为上半部分和下半部分,也就是说,我们要对i的取值分别讨论。
我们将上半区单独分出来仔细观察:
在第一行中,星星所处的位置只有4。
在第二行中,星星所处的位置为3,4,5。即[3,5]这个区间。
在第三行中,星星所处的位置为2,3,4,5,6。即[2,6]这个区间。
在第四行中,星星所处的位置为1,2,3,4,5,6,7。即[1,7]这个区间。
不难发现,星星所处的位置为一个闭区间,分别为[4,4],[3,5],[2,6],[1,7]……即为4±0,4±1,4±2……
即,星号的位置为一个区间。而对于上半区来说,这个区间为:[行的中位数(mid)-(当前行数-1),行的中位数(mid)+(当前行数-1)]。用代码实现便是:
执行结果如下:
(因为还没处理下半部分代码,所以那里全是问号)
接下来我们来看下半区:
在第五行中,星号所处的位置为2,3,4,5,6,即[2,6]这个区间。
在第六行中,星号所处的位置为3,4,5,即[3,5]这个区间。
在第七行中,星号所处的位置只有4。
不难发现,星号所处的位置为一个闭区间,分别为[2,6],[3,5],[4,4]。即为4±2,4±1,4±0。星号的变化顺序刚好与前3行相反,为递减关系。
对于下半区来说,星号所处的区间规律为:[mid-(总行数-当前行数),mid+(总行数-当前行数)]。用代码实现就是:
执行结果如下:
至此,代码已完成,可以实现题目要求的功能。可以自由改动column的值,生成任意大小的菱形。(注:coloum值必须为奇数,不然不能生成菱形)
打印实心菱形的完整源码如下:
那么,通过上文的思路,打印空心菱形也不难。我们只需将j的判断语句改为等于最左边或最右边星号的位置即可。
打印空心菱形的完整源码如下:
执行结果如下:
而如果需要打印实心心形的话,我们不妨借助上文的思路,通过上文的拆分来将心形拆分为上半部分和下半部分:
将图形往上移:
心形的结构比菱形稍微复杂一点,要多画几个心形来观察:
我们只需观察心形的上半部分(注:不包含最中间的那行)即可。来仔细观察上半部分:
仔细思考星号位置出现的规律,可以发现上半部分星号的位置属于这个区间:
[mid-当前行,当前行] ∪ [mid+mid-当前行,mid+当前行]
这个区间一样适用于没有任何星号的前几行。
那么,完整代码实现如下:
执行结果如下:
在网上搜了一下,没有具体的这种找规律然后用循环语句写出来的心形。心形上半区的规律真的很难找出来,我自认为我写得还是比较粗糙的。如果有大神有更好的思路的话,一定要不吝赐教!
总结:写代码一定要自己动手,多思考。动手和思考是最重要的,不要随随便便地就用百度找答案,多思考可以锻炼自己的思维,对日后的写代码都很有帮助。
这个图形在控制台输入时只由空格与星号组成,且是先打印空格,再打印星号。因此我们只要找出打印空格和星号的规律即可。
先初始化代码,写出大体的框架:
其中exep1、exep2分别为j处于空格列、星号列的判断语句。当语句满足对应的条件时,就输出空格或星号。因为菱形左边必定输出空格,剩余部分必定输入星号,因此需要两个j的for循环依次执行。
动手列个表,观察每一行空格、星号的个数规律:
发现空格的数量是|行数的中位数 - 行数|,星号的数量是(总行数-|中-行|*2。那么完整代码实现如下:
输出与上方菱形一致。
同理,想要用这个方法打印空心菱形的话,只需把星号列的判断条件改为“==”并加上j==1即可。
统一字符串中的 Windows \r\n 换行符 — Go语言实现在编程中,尤其是处理跨平台的文本数据时,换行符的处理是一个常见的问题。Windows 系统使用 \r\n 作为换行符,而 Unix-like 系统(如 Linux 和 macOS)使用 \n。在 Go 语言中,我们经常需要将 Windows 风格的换行符统一为 Unix 风格(或反之)以确保跨平台一致性。本文将探讨如何使用 Go 语
java for循环倒序输出
在这篇博文中,我将记述如何通过 Python 循环嵌套输出数字菱形图案的过程,结合一些技术背景、演进历程和架构设计等方面进行全面分析。在实际开发中,我们常常需要用可视化的方式呈现数据,数字菱形图案是一种说服力强且美观的展示形式,适合在控制台应用程序中使用。接下来,我会结合我的经验,详细探讨实现过程中的各个环节。### 背景定位在日常开发中,经常会遇到需要将数据以特定形式展示出来的需求。
实现Python输出菱形图案---## 1. 简介在本文中,我将向你展示如何使用Python编程语言输出一个菱形图案。我将逐步指导你完成这个任务,并解释每一步需要使用的代码。## 2. 整体流程下表展示了完成这个任务的整体流程:| 步骤 | 描述 || --- | --- || 1. 定义菱形的大小 | 你可以让用户输入菱形的大小,或者在代码中指定一个默认值 || 2
输出菱形图形
# 如何使用Java输出菱形图案输出菱形图案在编程中是一个经典的练习,它帮助初学者理解循环、条件语句和格式化输出。本文将带你逐步完成这一任务,确保理解每一步的实现思路。## 实现流程下面是实现输出菱形图案的基本流程:| 步骤 | 描述 ||------|----------------------------
行数为偶数为奇数都可以,但是输出图案的位置统一右移。#include<stdio.h>int main(){ int i=0; int j; int k; int line; scanf("%d",&line);
# 使用Python字典输出有换行符## 引言Python是一种强大且灵活的编程语言,字典(dictionary)是一种重要的数据结构,用于存储键值对。字典的灵活性使得它在处理各种数据时非常方便。在某些场景下,我们可能需要将字典中的内容输出到控制台时加上换行符,以便于阅读和理解。本文将探讨如何实现这一目标,并提供简单的代码示例。## 字典的基本概念在Python中,字典是一种可变的
# 使用 for 循环编写菱形图案的 Python 实现在编程的旅程中,有许多有趣和实用的任务等待着你去完成。其中,绘制一个菱形图案就是一个经典的练习,它不仅仅是对基本循环结构的应用,同时也是对字符串处理能力的训练。本文将详细介绍如何使用 Python 的 for 循环来实现这一目标。## 流程概述在开始编码之前,我们需要明确实现菱形图案的流程。下面是实现菱形的步骤表:| 步骤 |
目标不允许使用居中的功能通过一个循环,完成菱形的输出主要考查,循环知识,和简单的规纳算法能力需求为用户输入一个奇数这个数,生成一个菱形先画出菱形图为了推出菱形的一些规律可以先画出三个菱形作为参考寻找规律计算出左边行的公式计算出每一行应出现的符号数以7行为例代码的框架...
python打印一个菱形图案
一、题目:不允许使用居中的功能通过循环,完成菱形的输出主要考查,循环知识,和简单的规纳算法能力
python中的print函数主要用于输出。在我们常用的print()方法进行输出时,通常输出结果是整行显示出来的,这时候我们需要考虑一下,我们输出的结果需不需要换行?不需要换行的方法也是嗯容易的的,这里就不多赘述了,来说说如何做到输出换行:常用的转义符方式:#-*-coding:utf-8-*-A = "来看看能不能换行。"print (A)输出结果来看看能不能换行
Java第九次作业--输入输出流和文件操作(一)学习总结2.下面的程序实现了文件的拷贝,但采用的是一个字节一个字节的读写方式,效率很低。使用缓冲区可以减少对文件的操作次数,从而提高读写数据的效率。IO包中提供了两个带缓冲的字节流BufferedInputStream和BufferedOutputStream,查阅JDK帮助文档,修改程序,利用这两个类完成文件拷贝,对比执行效率。import jav
注意是反斜杠 打印输出时想获得换行效果:print "ab\nc"abc 在文件操作时想读取到换行效果 必须写成"ab\r\nc"abc 想真正获得/n普通含义则需要print "\\n"\n
python中 print()函数打印换行有几种 方法:1:第一种方法是使用多个print打印,多个print默认换行例子print("Hello world")print("Hello python")运行结果:2:只用一个print,换行之间使用\n例子: print("Hello world\nHello python")运行结果: &nbs
回车符号和换行符号产生背景: 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来
题目: 不允许使用居中的功能 通过循环,完成菱形的输出 主要考查,循环知识,和简单的规纳算法能力需求为: 用户输入一个数 生成一个对应行数的对称的菱形
前面已经提到,在字符串中可以使用反斜线进行转义;如果字符串本身包含反斜线,则需要使用“\”表示,“\”就是转义字符。Python 当然不会只支持这么几个转义字符, Python 支持的转义字符如表 1 所示:表 1 Python 支持的转义字符转义字符说明b退格符n换行符r回车符t制表符"双引号'单引号\反斜线掌握了上面的转义字符之后,下面在字符串中使用它们,例如如下代码:s = 'HellonC
Java猜数字游戏是一个经典入门案例,涵盖了变量声明、条件判断、循环控制等核心知识点。程序通过随机数生成目标数字,在循环中接收玩家输入并给出"太大/太小"提示,直到猜中为止。代码采用模块化设计,包含输入验证、游戏统计等功能,并支持多轮游戏。文章详细解析了代码实现要点,包括异常处理、参数配置等编程实践,同时提出了难度分级、计时功能等拓展思路。通过这个项目,初学者可以系统掌握Java基础语法和逻辑思维,为进一步学习打下坚实基础。
本文介绍了基于Apache POI 5.2.5的企业级Excel工具类设计,主要解决数据导入导出中的常见问题。该工具类提供以下核心功能:创建带样式的Sheet、支持多种数据结构填充、设置文本格式防止精度丢失、内置常用字段验证规则、下拉选择与跨表联动功能,以及自动计算行高列宽。特别针对长数字、枚举值等场景提供了优化方案,如强制设置文本格式避免科学计数法、内置手机号/身份证/车牌号等验证逻辑。通过封装常用操作,该工具类可显著提升开发效率,适用于报表生成、批量数据处理等企业应用场景。
好的,ll 命令是 Linux 系统中一个非常常用但并非原生存在的命令。它实际上是 ls -l 命令的一个别名,用于以长列表格式显示文件和目录的详细信息。 下面我们详细解读 ll(即 ls -l)命令显示结果中每一列的含义。 一个典型的 ll 命令输出示例 $ ll 总用量 48 drwxr-xr- ...
帽操作则通过原始图像与开运算结果的差值突出细节。文中提供了Python代码示例和效果对比图,展示了各类操作的实际应用效果。这些形态学操作在图像预处理、特征提取等领域具有重要作用。
目录一、项目准备:工具与环境配置二、爬虫核心实现:三步完成数据采集三、完整流程整合四、反爬策略与应对方案五、代码优化与扩展六、常见问题Q&A七、总结与建议一、项目准备:工具与环境配置1.1 开发工具选择编程语言:Python 3.8+(推荐Anaconda管理环境)核心库:requests(HTTP请求)、BeautifulSoup(HTML解析)、pandas(数据存储)辅助工具:Chr