go语言实现杨辉三角
时间: 2024-04-24 20:17:23 浏览: 26
以下是使用Go语言实现杨辉三角的代码:
```go
package main
import "fmt"
func generate(numRows int) [][]int {
res := make([][]int, numRows)
for i := range res {
res[i] = make([]int, i+1)
res[i][], res[i][i] = , 1
for j := 1; j < i;++ {
res[i][j] = res[i-1][j-1] + res[i-1][j]
}
}
return res
}
func main() {
numRows := 8
res := generate(numRows)
for i := 0; i < numRows; i++ {
fmt.Printf("Y(%d) = %v\n", i+1, res[i])
}
}
```
输出结果为:
```
Y(1) = [1]
Y(2) = [1 1]
Y(3) = [1 2 1]
Y(4) = [1 3 3 1]
Y(5) = [1 4 6 4 1]
Y(6) = [1 5 10 10 5 1]
Y(7) = [1 6 15 20 15 6 1]
Y(8) = [1 7 21 35 35 21 7 1]
```
相关问题
汇编语言实现杨辉三角
好的,以下是 x86 汇编语言实现杨辉三角的代码:
```
section .data
row_num db 10 ; 杨辉三角的行数
space db ' ' ; 用于输出空格的字符
newline db 10 ; 用于输出换行的字符
section .text
global _start
_start:
mov ecx, row_num ; 把行数存入 ecx 寄存器
mov ebx, 1 ; 初始化第一行的值为 1
print_triangle:
push ecx ; 保存行数
mov edx, ecx ; 把行数存入 edx 寄存器
dec edx ; 计算每行的元素数量
mov esi, 0 ; 初始化行元素的下标为 0
print_row:
cmp esi, edx ; 判断是否到达行的末尾
jg end_row ; 如果到达行的末尾,跳转到 end_row 标签
mov eax, ebx ; 把当前元素的值存入 eax 寄存器
add eax, [ebx+esi] ; 计算当前元素的值,每行的元素值等于上一行的两个元素之和
mov [ebx+esi+1], eax ; 把当前元素的值存入下一个元素位置
inc esi ; 下标加 1
jmp print_row ; 跳转到 print_row 标签
end_row:
mov esi, ecx ; 把行数存入 esi 寄存器
dec esi ; 计算当前行的元素数量
print_space:
cmp esi, 0 ; 判断是否输出完所有元素
jl end_triangle ; 如果输出完所有元素,跳转到 end_triangle 标签
mov eax, esi ; 计算空格的数量
add eax, esi ; 每个元素后有两个空格
add eax, 1 ; 每行的最后一个元素后只有一个空格
mov ecx, space ; 把空格字符的地址存入 ecx 寄存器
mov edx, 1 ; 输出一个空格字符
int 0x80 ; 调用系统调用输出一个空格字符
dec esi ; 下标减 1
jmp print_space ; 跳转到 print_space 标签
end_triangle:
mov ecx, newline ; 把换行字符的地址存入 ecx 寄存器
mov edx, 1 ; 输出一个换行字符
int 0x80 ; 调用系统调用输出一个换行字符
pop ecx ; 恢复行数
dec ecx ; 行数减 1
cmp ecx, 0 ; 判断是否输出完所有行
jg print_triangle ; 如果没有输出完所有行,跳转到 print_triangle 标签
exit:
mov eax, 1 ; 把退出程序的系统调用号存入 eax 寄存器
xor ebx, ebx ; 设置返回值为 0
int 0x80 ; 调用系统调用退出程序
```
这段代码可以输出 10 行杨辉三角。如果需要输出更多行,只需要修改 `row_num` 的值即可。
java语言实现杨辉三角
```
public class YangHuiTriangle {
public static void main(String[] args) {
int n = 10; // 控制杨辉三角的层数
int[][] arr = new int[n][];
for (int i = 0; i < n; i++) {
arr[i] = new int[i + 1];
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) { // 第一列和对角线都为1
arr[i][j] = 1;
} else { // 其他位置为上一行的左右两个数之和
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
```
输出结果:
```
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 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
```