杨辉三角

例子:列表--杨辉三角

雨燕双飞 提交于 2019-12-01 12:47:42
首先需要了解一下什么是杨辉三角,如下图所示: 方法一:计算杨辉三角的前6行 1 yang = [] 2 # 首先创建一个空列表yang 3 for i in range(6): 4 # 循环6次输出前6行,range是从0开始的 5 row = [1] 6 # 建一个只包含1的列表row,并且每次循环都重新定义 7 yang.append(row) 8 # 将列表row作为元素添加到列表yang里面 9 if i == 0: 10 continue 11 # 这里是第一行的输出,第一行只有一个1,作为特殊情况 12 for j in range(i-1): 13 row.append(yang[i-1][j] + yang[i-1][j+1]) 14 # yang[i-1][j],yang列表的元素是列表row 15 # 这里的意思是yang列表的第i-1个元素的j元素 16 row.append(1) 18 print(yang) 19 ############################################## 20 D:\untitled\project2\venv\Scripts\python.exe D:/untitled/project2/day1/yanghui.py 21 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1],

[CSP-S模拟测试]:sum(数学+莫队)

走远了吗. 提交于 2019-11-30 21:20:00
题目传送门(内部题63) 输入格式 第一行有一个整数$id$,表示测试点编号。 第一行有一个整数$q$,表示询问组数。 然后有$q$行,每行有两个整数$n_i,m_i$。 输出格式 一共有$q$行,每行一个整数表示每组询问的答案$S_{n_i,m_i}$对$10^9+7$取模的结果。 样例 样例输入: 1 5 1 1 2 1 3 2 4 3 5 5 样例输出: 2 3 7 15 32 数据范围与提示 对于所有数据,$1\leqslant q,n_i,m_i\leqslant 10^5$。 题解 考场上把$80$分部分分都水全了,愣是没想到莫队…… 先来考虑所有询问的$n_i$相等应该怎么办,预处理即可,考虑$S_{n,m-1}$如何转移到$S_{n,m}$,无非就是加上$C_n^m$即可,不再赘述。 现在考虑所有询问的$m_i$相等应该怎么办,显然预处理没有那么简单,考虑$S_{n-1,m}$如何转移到$S_{n,m}$,既然组合数可以用杨辉三角推得,不妨画个杨辉三角。 为方便,我现在只画出杨辉三角中的其中两行为例 设$1$号点为$n-1$行的行首,$4$号点为$n$行的行首,利用杨辉三角的性质,编号为$4$的点等于编号为$1$的点,编号为$5$的点等于编号为$1$的点和编号为$2$的点的加和,编号为$6$的点等于编号为$2$的点和编号为$3$的点的加和。 还可以发现,在从$n-1

杨辉三角

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-30 06:08:17
给定一个非负整数 *numRows,*生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 样例 样例 1: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 样例 2: 输入: 3 输出: [ [1], [1,1], [1,2,1] ] class Solution { public: /** * @param numRows: num of rows * @return: generate Pascal's triangle */ vector<vector<int>> generate(int numRows) { // write your code here vector<vector<int>> ret; if(numRows == 0) { return ret; } vector<int> tmp; int array[numRows][numRows]; memset(array, 0, numRows*numRows*4); int i = 0; int j = 0; for(i=0; i<numRows; i++) { array[i][0] = 1; array[i][i] = 1; } for(i=2; i<numRows; i++) { for(j=1;

杨辉三角——数组解决

久未见 提交于 2019-11-30 03:34:38
杨辉三角如图下所示,每一行的第一个数和最后一个数都为1,每一行中间的数(出去第一个和最后一个)a等于上一行与其相同列数的数b与数b前面的数之和。例: 第3行第2列的数是3,它就等于第2行第2列的数(即2)加上第2行第1列的数(即1)。第一行和第二行的数除外。 用二位数组arr[i][j]表示的话,i表示行,j表示列,则 arr[i][j]=arr[i-1][j]+arr[i-1][j-1] 程序如下: #include<stdio.h> #include<stdlib.h> int main() { int i, j, k, a[20][20] = { 0 }; printf(“请输入要打印的行数:\n”); scanf("%d",&k); for(i = 0; i < k; i++) { //每一行的第一个数和最后一个数为1 a[i][0] = 1; a[i][i] = 1; } for(i = 1; i < k;i++) for(j = 1; j <= i; j++) { a[i][j]= a[i - 1][j - 1] + a[i - 1][j]; } for(i = 0; i < k; i++) { for (j = 0; j <= i; j++) { printf("%5d", a[i][j]); } printf("\n"); } system(“pause”);

C++打印杨辉三角形

ぃ、小莉子 提交于 2019-11-30 03:33:32
#include <iostream> #include <iomanip> #include <Windows.h>using namespace std; #define N 256 void print_pyramid(int a[N][N], int lines); int main(void) { int n = 0; int a[N][N] = { 0 }; cout << "请输入要打印的杨辉三角形行数:"; cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { if (j == 0 || j == i) { a[i][j] = 1; } else { a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; } } } print_pyramid(a, n); system("pause"); return 0; } void print_pyramid(int a[N][N],int lines) { for (int i = 0; i < lines; i++) { int width = (lines - i) * 2; cout << setw(width) << a[i][0]; for (int j = 1; j <= i; j++) {

杨辉三角

懵懂的女人 提交于 2019-11-29 17:34:26
# 杨辉三角,编程思想:首位和末尾数字不变,中间的是上两位相加的和1 list01 = [1] 2 print(list01[0]) 3 def yanghuisanjiao(number): 4 global list01, list02 5 list02 = [] 6 for i in range(number): 7 list02.append(list01[0]) 8 for i in range(len(list01)-1): 9 list02.append(list01[i]+list01[i+1]) 10 list02.append((list01[-1])) 11 for i in list02: 12 print(i,end=' ') 13 print() 14 list01 = list02 15 list02 = [] 16 17 yanghuisanjiao(20) 1 list01 = [1] 2 list02 = [] 3 print(list01[0]) 4 for i in range(20): 5 list02.append(list01[0]) 6 for i in range(len(list01)-1): 7 list02.append(list01[i]+list01[i+1]) 8 list02.append((list01[-1]))

杨辉三角的函数实现

蹲街弑〆低调 提交于 2019-11-29 14:49:41
以下是杨辉三角的函数实现,使用时直接用c[3][2]就是组合数 C 3 2 C_{3}^{2} C 3 2 ​ 的值 以下是函数实现 # include <bits/stdc++.h> using namespace std ; long long c [ 105 ] [ 105 ] ; const int mod = 1000000007 ; void init ( int n ) { c [ 0 ] [ 0 ] = 1 ; printf ( "这是第0行: \n" ) ; printf ( "%8.0lld\n" , c [ 0 ] [ 0 ] ) ; for ( int i = 1 ; i <= n ; i ++ ) { printf ( "这是第%d行: \n" , i ) ; c [ i ] [ 0 ] = 1 ; printf ( "%8.0lld" , c [ i ] [ 0 ] ) ; for ( int j = 1 ; j <= n ; j ++ ) { c [ i ] [ j ] = ( c [ i - 1 ] [ j - 1 ] + c [ i - 1 ] [ j ] ) % mod ; printf ( "%8.0lld" , c [ i ] [ j ] ) ; } printf ( "\n" ) ; } } int main ( ) { int n ;

《算法笔记》 2.5小节 问题 C: 习题6-6 杨辉三角

限于喜欢 提交于 2019-11-28 13:26:49
题目描述 按要求输入如下格式的杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 最多输出10层 输入 输入只包含一个正整数n,表示将要输出的杨辉三角的层数。 输出 对应于该输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开 样例输入 5 样例输出 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 这道题目的输出大家需要注意,第一行只输出了一位数,后面没有数。如果大家用的输出方式是每行全部输出的话,那么后面会出现很多0,这跟答案是不一样的! #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int n; int a[10][10]={{1},{1,1},{1,2,1},{1,3,3,1},{1,4,6,4,1},{1,5,10,10,5,1} }; scanf("%d",&n); for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ printf("%d ",a[i][j]);//第二层循环里的for,j<=i,这代表了第一行最多输出一个元素,第n行最多输出n个元素。 } printf("\n"); } system("pause"); } 大家如果有疑问,欢迎在评论下方留言! 来源:

LeetCode 118.杨辉三角(简单)

不羁的心 提交于 2019-11-28 07:16:34
题目描述: 思路: 当前行头元素先追加 1 当前行除了第一和最后一个元素的值(i,j)=上一行(i-1,j-1)+上一行(i-1,j) 遍历完,当前行追加1 class Solution: def generate(self, numRows: int) -> List[List[int]]: res=[] while numRows: temp=[1] if not res: res.append(temp) else: n=len(res[-1]) for i in range(n-1): temp.append(res[-1][i]+res[-1][i+1]) # temp.append(su) temp.append(1) res.append(temp) numRows-=1 return res 来源: https://blog.csdn.net/weixin_38664232/article/details/100031106

Python实现的一些常见简单问题(持续更新)

冷暖自知 提交于 2019-11-28 05:31:57
提纲: 1.汉诺塔 2.找到某个范围内的所有质数 3.杨辉三角 4.用闭包实现一个计数器,调用一次计数器加1 5.将类构造成可迭代对象,实现斐波那契数列 ...... 1.汉诺塔( 汉诺塔 ) 用递归函数实现汉诺塔(A、B、C柱,要将圆盘从A柱移到C柱,且排列顺序不变) 思想:不管A柱有多少个圆盘(假设n个),我们可以将看成将上面的(n-1)个圆盘看成一个整体,那么问题就变得非常简单: 1)将上面的(n-1)个圆盘实现从A柱全部移动到B柱 2)把最后一个圆盘从A柱移到C柱 3)将刚刚移到B柱的(n-1)个圆盘从B柱全部移动到C柱。 这就是整个的过程,那么我们可以看到,上述1)和3)其实也是一次汉诺塔的完整过程,只不过是圆盘数目不同。因此,这里利用递归函数就能快速简单地解决问题。 代码如下; def move(n,a,b,c): ''' n:圆盘数 a,b,c分别代表三个柱子 ''' if n == 1: print(a, '-->', c) else: move(n-1,a,c,b) print(a, '-->', c) move(n-1,b,a,c) if __name__ == '__main__': move(3,'A','B','C') # 输出: # A --> C # A --> B # C --> B # A --> C # B --> A # B --> C # A