“数字直角三角形”的循环简化

【题目描述】

给出n(1<=n<=13),请输出一个直角边长度是n的数字直角三角形。

【样例输入】

5

【样例输出】

0102030405

06070809

101112

1314

15

【题目来源】

洛谷P5721 【深基4.例6】数字直角三角形

【解析】

本题的样例输出一眼望过去就是像一个矩阵,或者叫三角阵貌似更形象。我家娃断言,老师教过的,这种要使用一个x坐标、一个y坐标,因此要用两重循环。

看起来确实是这样:

①大循环:一行一行的输出,这是一种重复作业,可以用循环。

②小循环:一个数一个数的输出,后一个数是前一个数加1,这是一种有规律重复作业,可以用循环。

标准代码:

#include<cstdio>
using namespace std;
int main(){int cnt=0, n;scanf("%d", &n);for(int i=1; i<=n; i++){for(int j=1; j<=n+1-i; j++){printf("%02d", ++cnt);}printf("\n");}return 0;
}

代码中的i相当于y坐标,j相当于x坐标。本题的关键是要求出换行的位置,也就是每行中最后一个要输出的数的x坐标,即每行j的最大值j_max。

以n=5为例:

换行

i

j_max

规律

1

1

5

1+5=6

2

2

4

2+4=6

3

3

3

3+3=6

4

4

2

4+2=6

5

5

1

5+1=6

不难发现一个规律,i+j_max=6=5+1=n+1,即j_max=n+1-i。

但是老金看到这道题的第一感觉是应该可以用一层循环求解,当我提出这个想法时,却被我家娃一顿嘲笑。

他说老师教过,要用x坐标、y坐标。

只能感叹教育的僵化,希望老师们能意识到,教学生时尽量不要用“要”这个字,而应用“可以”、“也许”、“试试”之类的词。

之所以我认为可以用一层循环,主要是因为输出的数的规律是一致的,都是递增1,只不过要在不同的位置输出换行符。

所以,实现一层循环的难点依然是找到换行的位置。

因为只有一层循环,迭代的变量自然就是要输出的数。所以此时便没有了y坐标,就不能再用上表中与y坐标的和是固定值的规律了。

但是在上表中,单看j_max这一例也能一眼看出一个规律,就是值从n开始,每次递减1。咱们就可以利用这个规律实现一层循环。方法就是再引入一个累加器j++,每行开始输出时将其值置为0,当它累加到j_max的时候输出换行符。

代码如下:

#include<stdio.h>
int main(){int n, j=0;scanf("%d", &n);for(int i=1;;i++){j++;printf("%02d", i);if(j==n){printf("\n");n--;j=0;}if(n==0) break;}return 0;
}

还有另外一个思路,就从输出的数中找出换行的位置,还是以n=5为例,假设输出的数为i。

换行

i

规律

1

5

0+5

2

9

5+4

3

12

9+3

4

14

12+2

5

15

14+1

每次输出换行符的位置都是上一个位置加上一个n--。代码如下:

#include<stdio.h>
int main(){int n, i_newline;scanf("%d", &n);i_newline=n;for(int i=1;;i++){printf("%02d", i);if(i==i_newline){printf("\n");n--;i_newline+=n;}if(n==0) break;}return 0;
}

还有一点,上面两个一层循环的退出条件还可以直接设置在循环条件判断处。

for(int i=1;i<=n*(n+1)/2;i++)

想想为什么?

当然,此时代码中就不能随便改n的值了,即不能直接用n—了,而要先把n的值赋给另一个变量m,让m--。

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

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

相关文章

12 完全分布式搭建-SSH免密登录

配置 ssh &#xff08;1&#xff09;基本语法 ssh 另一台电脑的 IP 地址 &#xff08;2&#xff09;ssh 连接时出现 Host key verification failed 的解决方法 [ytmaster~]$ ssh slave01 ➢ 如果出现如下内容 Are you sure you want to continue connecting (yes/no)…

简明 Python 教程(第13章 更多Python的内容)

到目前为止&#xff0c;我们已经学习了绝大多数常用的Python知识。在这一章中&#xff0c;我们将要学习另外一些方面的Python知识&#xff0c;从而使我们对Python的了解更加完整 。 特殊的方法 在类中有一些特殊的方法具有特殊的意义&#xff0c;比如__init__和__del__方法&…

代码随想录算法训练营Day36|LC435 无重叠区间LC763 划分字母区间LC56 合并区间

一句话总结&#xff1a;都是和昨天的用最少箭引爆气球类似的题。 原题链接&#xff1a;435 无重叠区间 计数不重叠的区间的个数&#xff0c;然后用总长度减去这个值即可。 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a,…

2.4 比较检验 机器学习

目录 常见比较检验方法 总述 2.4.1 假设检验 2.4.2 交叉验证T检验 2.4.3 McNemar 检验 接我们的上一篇《性能度量》&#xff0c;那么我们在某种度量下取得评估结果后&#xff0c;是否可以直接比较以评判优劣呢&#xff1f;实际上是不可以的。因为我们第一&#xff0c;测试…

谭浩强第五版C语言课后习题(编程题)+答案

谭浩强第五版作为初学C语言必读的一本教材&#xff0c;课后习题具有非常大的参考价值&#xff0c;也是很多高校期末考试或者考研的重要参考。在这里我整理了一部分个人认为比较重要的编程题&#xff0c;供大家作参考 1.输入两个数&#xff0c;求他们的最大公约数和最小公倍数&…

区间开关灯模型

P3870 [TJOI2009] 开关 先看一道经典的区间开关灯问题的模型&#xff0c;维护一个lz 每次异或操作就好了 #include<bits/stdc.h> using namespace std; using ll long long; using pii pair<int,int>; const int N 1e510; const int inf 0x3f3f3f3f; const int…

道可云元宇宙每日资讯|国家能源局:探索推广虚拟电厂等新技术

道可云元宇宙每日简报&#xff08;2024年3月25日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 国家能源局&#xff1a;探索推广虚拟电厂等新技术 国家能源局印发《2024年能源工作指导意见》&#xff0c;其中提出&#xff0c;促进能源新技术应用示范。组织开展能…

卸载docker

对于使用systemd的系统&#xff08;如Ubuntu、Debian、CentOS 7及以上版本&#xff09;&#xff1a; 停止Docker服务&#xff1a; sudo systemctl stop docker 卸载Docker程序包&#xff1a; 对于使用apt的系统&#xff08;如Ubuntu、Debian&#xff09;&#xff1a; sudo a…

RCG如何将带有噪声的表征+条件输入RDM并得到去噪的表征

一、有条件去噪控制 很简单的一个模型&#xff0c;整体来说就是将“内容&#xff08;图像&#xff09;” “图像所对应的标签” “每个噪声表征对应的时间步Timestap”分别输入进线性层Layer&#xff0c;然后将他们的表征相加&#xff08;&#xff09;即可 执行步骤是&…

FCP270 P0917YZ 兼容性如何

FCP270 P0917YZ 是一种现场控制处理器&#xff0c;通常应用于工业自动化和过程控制系统中。 这款现场控制处理器的主要职责是监测和控制多种过程变量&#xff0c;确保系统的正常运行&#xff0c;并且满足生产的要求。以下是关于FCP270 P0917YZ的一些可能用途和特点&#xff1a…

vue3挂载axios挂载全局方法

vue3中在 // main.jsimport axios from "axios"; app.provide("$axios", axios);app.mount("#app");// Home.vue import { inject } from "vue"; const http inject("$axios");const getUser () > {http.post("…

HWOD:名字的漂亮度

一、题目 描述 给出一个字符串&#xff0c;该字符串仅由小写字母组成&#xff0c;定义这个字符串的漂亮度是其所有字母漂亮度的总和 每个字母都有一个漂亮度&#xff0c;范围在1到26之间。没有任何两个不同字母拥有相同的漂亮度。字母忽略大小写。 给出多个字符串&#xff…

MySQL 常用函数总结【持续更新】

1、根据起止日期获取二者之间的秒数 SELECT TIMESTAMPDIFF(SECOND, kssj, jssj) , kssj , jssj from your_table 起止日期应该是DATETIME、TIMESTAMP或DATE类型的列。如果它们是字符串&#xff0c;你可能需要先将它们转换为日期或时间戳类型&#xff1b; 第一个参数&#xf…

船舶航行突发事故3D模拟仿真演练优化搜救路线

在波澜壮阔的海洋世界中&#xff0c;船舶事故与搜救行动始终牵动着无数人的心。为了更好地应对这些挑战&#xff0c;我们倾力打造了3D船舶事故和搜救情景再现系统&#xff0c;旨在以科技之力为海事安全保驾护航。 该系统采用先进的web3D开发渲染技术&#xff0c;能够真实模拟船…

探索ttkbootstrap:让Python GUI开发更简洁高效

介绍 探索ttkbootstrap&#xff1a;让Python GUI开发更简洁高效.在Python的GUI开发领域&#xff0c;有许多优秀的工具和库可以帮助开发者快速构建出漂亮、功能丰富的用户界面。而在这些工具中&#xff0c;ttkbootstrap 脱颖而出&#xff0c;为Python开发者带来了更简洁高效的G…

实验3 中文分词

必做题&#xff1a; 数据准备&#xff1a;academy_titles.txt为“考硕考博”板块的帖子标题&#xff0c;job_titles.txt为“招聘信息”板块的帖子标题&#xff0c;使用jieba工具对academy_titles.txt进行分词&#xff0c;接着去除停用词&#xff0c;然后统计词频&#xff0c;最…

火山引擎VeDI:A/B测试开放平台正式上线,企业个性化平台一键定制

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 火山引擎数智平台VeDI旗下的A/B测试平台&#xff08;DataTester&#xff09;&#xff0c;旨在为企业提供科学且可信的A/B测试能力及丰富的场景实验支持。随着企业的…

java常用优秀开发框架及工具类汇总

目录 1、各类系统及简称扫盲2、开发框架2.1、若依(ruoyi) 3、工具组件3.1、java工具类库3.1.1、HuTool3.1.2、office、excel、pdf文档处理3.1.3、运行日志管理3.1.4、数据层框架3.1.5、数据库连接池 java发展了很多年&#xff0c;为了便于开发&#xff0c;出现刴优秀的开发框架…

知识图谱操作的探索与利用

目录 前言1 搜索&#xff08;Search&#xff09;1.1 基于关键词搜索1.2 属性搜索1.3 模式匹配 2 过滤&#xff08;Filtering&#xff09;2.1 属性过滤2.2 关系过滤 3 引导&#xff08;Guidance&#xff09;3.1 相关实体推荐3.2 路径推荐 4 合并&#xff08;Merging&#xff09;…

WPF自定义Panel:让拖拽变得更简单

在 WPF 应用程序中&#xff0c;拖放操作是实现用户交互的重要组成部分。通过拖放操作&#xff0c;用户可以轻松地将数据从一个位置移动到另一个位置&#xff0c;或者将控件从一个容器移动到另一个容器。然而&#xff0c;WPF 中默认的拖放操作可能并不是那么好用。为了解决这个问…