Golang实现杨辉三角
杨辉三角,也算是一个经典的题目了。就简单的说说。
写代码之前,先分析要做的东西的特点,找到规律,再把这个规律描述一下。
然后把这个描述翻译成编程语言,就可以说是编程了。
那么杨辉三角有什么特点?
首先是个三角,在数学里边,我们手写画出来,就像一个等腰三角形。
而在计算里边,打印个等腰三角形,还真不不太容易,好在三角的形状不是我们关注的重点,所以,我们这个三角形,是直角三角形,腰没了。
这个三角形有还有什么特点呢?
先是元素个数,这个有个特点,就是当前是第几行,那么这行就会有几列,比如,第一行,那么只有一列,第二行,就有两列,第三行有三列……
还有顶点(前两行)和两边,都是1,并且所有对称,每一行如果是一个字符串的话, 这就属于一个回文串。
那什么是回文串?可不是回族文字的字符串啊,是正读反读都是一样的字符串。比如:123454321,abcdedcba等等
那么再看看,还有其他特点么?
答案是肯定的,还有一个特点就是,从第三行开始,每行(除了第一个和最后一个)数字,都是上一行,同列的值加上上一行前一列的值的和。
到这里,基本上就算是分析完了。理论上,我们把这些翻译成代码,这也就算写完了。
但是任何语言的翻译,都是要再修饰,太直白的翻译,硬!所以,后续根据情况,还要做些优化。
尝试写代码:
1、三角形(直角),其实就是一个长方形对角线的一半。可以理解成一个二维数组,一半有值,一半空。
- const LINES int = 10;
- var yh [LINES][LINES]int;
这样就定义了一个10行,10列的数组
矩阵有了,还要有坐标。因为要用循环来操作嘛,循环的时候,二维数组我们习惯用“i”和“j”来做下标,我们也顺便把两个变量看成坐标。i就是行,j就是列。
2、顶点(前两行)和两边都是1,从第三行开始,每行(除了第一个和最后一个)数字,都是上一行,同列的值加上上一行前一列的值的和
- if i < 2 {//两行以内三角中的数字都是1
- yh[i][j] = 1;
- }else{//第三行开始,正式计算数值写入数组
- if j == 0 || j == i {
- yh[i][j] = 1;//所有行的第一列和最后一列都是1
- }else{
- yh[i][j] = yh[i-1][j-1] + yh[i-1][j];//当前数组元素是上一行的前一个元素加上上一行的当前列元素
- }
- }
上边,这段代码,同样是翻译了之前的一段描述,也就是杨辉三角的特点。到此为止,我们的代码关键部分基本完成了,还有哪里呢?
想想,哦~~还有个第几行,就是第几列。二维数组嘛,半个三角。那么如何写呢?
- for i := 0; i < LINES; i++ {//LINE行
- for j := 0; j < i + 1; j++ {//有几行,就有几列
- //代码片段
- }
- }
以上代码,就是用到的循环。那么到这里,所有的代码翻译完成。这样就把这个杨辉三角完成了。
在循环过程中,可以输出数据,配合格式符,就是一个三角。
循环结束,数组的下标,就是杨辉三角的坐标,可以根据坐标,返回对应坐标的数字。
下边是完整代码:
- package main;
- import (
- "fmt"
- );
- const LINES int = 10;//设定杨辉三角10行,同时也相当于10列
- func ShowYanghui(){
- var yh [LINES][LINES]int;
- for i := 0; i < LINES; i++ {
- for j := 0; j < i + 1; j++ {
- if i < 2 {//两行以内三角中的数字都是1
- yh[i][j] = 1;
- }else{//第三行开始,正式计算数值写入数组
- if j == 0 || j == i {
- yh[i][j] = 1;//所有行的第一列和最后一列都是1
- }else{
- yh[i][j] = yh[i-1][j-1] + yh[i-1][j];//当前数组元素是上一行的前一个元素加上上一行的当前列元素
- }
- }
- fmt.Printf("%d\t", yh[i][j] );//格式化输出一行
- }
- fmt.Print("\n");//换行
- }
- }
- func main(){
- ShowYanghui();
- };
输出效果:
Golang实现杨辉三角的更多相关文章
- [LeetCode] Pascal's Triangle II 杨辉三角之二
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...
- [LeetCode] Pascal's Triangle 杨辉三角
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...
- POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]
Irrelevant Elements Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2407 Accepted: 59 ...
- python生成器实现杨辉三角
def triangels(): """ 杨辉三角 """ lst = [1] n_count = 2 # 下一行列表长度 while Tr ...
- python 生成器生成杨辉三角
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...
- HDNOIP201405杨辉三角
2016.1.27 试题描述 杨辉三角是形如如下的数字三角形: 1 1 1 1 2 1 …… 现在想求出杨辉三角第N行的N个数中,有多少个数能被给定的质数p整除. 输入 一行两个空格隔 ...
- Java的二维数组的应用及杨辉三角的编写
(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...
- POJ3187Backward Digit Sums[杨辉三角]
Backward Digit Sums Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6350 Accepted: 36 ...
- 杨辉三角用java实现
代码如下: public class ErArray { public static void main(String[] args) { //杨辉三角 int[][] num = new int[1 ...
随机推荐
- linux下tar命令的常用实例
语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项:c 创建新的档案文件.如果用户想备份一个目录或是一些 ...
- springCloud之配置中心学习
调试了好久,中与在地址栏输入http://localhost:9004/liyong-test/ms-dev.properties,奇迹出现了,终于可以访问我的配置中心了.这次也是碰运气,并没有觉得会 ...
- Java课程寒假之开发记账本软件(网页版)之五
一.实现基本功能之后 可以添加其他功能,比如说添加账户,删除账户,以及查询页面的分页.(我都没写,滑稽) 二.基本功能部分截图
- 《JAVA编程思想》第四版 PDF
感谢,参考:https://www.cnblogs.com/buwuliao/p/8073211.html 一.链接: 中文版: https://pan.baidu.com/s/1d07Kp4 密码: ...
- python中元组与数组的区别
列表: a=['12', '3rr'] 元组: t=(21,34) 列表可以修改,而元组不可以修改,如果元组中仅有一个元素,则要在元素后加上逗号. 元组和列表的查询方式一样. 元组只可读不可修改. 如 ...
- 【MySQL】锁——查看当前数据库锁请求的三种方法 20
MySQL提供了查看当前数据库锁请求的三种方法:1. show full processlist命令 观察state和info列 2. show engine innodb status\G ...
- try 和 catch 和 finally
try块中出现异常走进catch,异常后面的代码不会再被执行:finally块里try和catch执行完后要执行的代码,且一定会执行. 在释放资源的时候,不要多个放在一个try块里面. 流的关闭顺序: ...
- Parallel.ForEach 多线程 声明失败 "未将对象引用设置到对象的实例"
x using System; using System.Collections.Generic; namespace Parallel.ForEach { class Program { //代码结 ...
- PowerPoint使用技巧
1.右键Group两个元素,可以一起移动: 2.Insert 屏幕输入功能: 3.录制旁白: 4.录制完旁白之后可以生成视频: 5.如果不确定所有引用的组件是否可以在别的机器上使用,可以导出只CD,生 ...
- pip升级包错误问题解决
命令框内输入 sudo pip install six --upgrade --ignore-installed six --红色字体表示想要忽略的包名称--