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();
};

  

输出效果:

原文地址:https://www.cnblogs.com/leafinwind/p/10290125.html

时间: 2024-10-09 21:19:40

Golang实现杨辉三角的相关文章

LeetCode (13) Pascal&#39;s Triangle (杨辉三角 )

题目描述 Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return 从第三行开始,每行除了最左边和最右边两个数为1,其他数字都是上一行中相邻两个数字之和.根据上述规则可以写出下面的代码: class Solution { public: vector<vector<int> > generateRow1() { vector<in

杨辉三角

1 package com.llh.demo; 2 3 /** 4 * 杨辉三角 5 * 6 * @author llh 7 * 8 */ 9 public class Test { 10 /* 11 * 杨辉三角 12 */ 13 public static void main(String[] args) { 14 int[] a = new int[11]; 15 int num = 1; 16 // 17 for (int i = 1; i <= 10; i++) { 18 for (i

杨辉三角实例菱形实例

杨辉三角实例 public class Hui { public static void main (String [] args){ int [][] a =new int [10][10]; for(int i=0;i<a.length;i++){ for(int j=0;j<=i;j++){ if(j==0||i==j){ System.out.print(" "+(a[i][j]=1)); }else {a[i][j]=a[i-1][j-1]+a[i-1][j];

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

使用Java打印杨辉三角

package 杨辉三角; import java.util.Scanner; public class 三角 { private static Scanner scn; public static void main(String[] args) { scn = new Scanner(System.in); System.out.println("请输入数据"); int n = scn.nextInt(); //定义一个二维数组 int [][] array = new int

Java的二维数组的应用及杨辉三角的编写

(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个,即该位置上的元素在该行上最大,在该列上最小(注:一个二维数组也可能没有这样的鞍点). /** * * @author liuhui *@version Java上机实验三 *@time 2016.10.30 */ public class javatest2 { public static int

实现杨辉三角的10种解法--体验Python之美

本文收集了使用python实现杨辉三角的多种解法,主要为网上收集,也有一些是自己写的.从中可以体会python编写一个算法的不同思想和Python语法的特点. 杨辉三角是什么?还是度娘吧,看起来像是这样的:                          1                          1   1                           1   2   1                         1   3   3   1               

如何用C++打印杨辉三角

下面是杨辉三角的一部分,我们观察观察它有什么规律: 1 1      1 1     2     1 1     3     3     1 1     4     6     4     1 1     5    10    10    5    1 1     6    15    20   15    6    1 1     7     21    35   35   21   7    1 ................ 通过观察不难发现,三角的两边都是1,而且除边界外的每个数的值都

Pascal&#39;s Triangle II 杨辉三角

1 class Solution { 2 public: 3 vector<int> getRow(int rowIndex) { 4 vector<vector<int>> tri; 5 if(rowIndex==0) 6 { 7 vector<int> c; 8 c.push_back(1); 9 return c; 10 } 11 vector<int> b; 12 b.push_back(0); 13 b.push_back(1); 14