标签:lib 简单的 int clu flag amp 方法 can lag
//第一次尝试:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #define N 10 //正常排列的杨辉三角 int arr[N][2 * N - 1] = { 0 }; void YangHuiTriangle(int n) { int flag = 1; int mid = n; arr[0][n] = 1; for (int i = 1; i < n; i++) { if (flag == 1) { for (int j = 0, k = 1; j < (i + 1) / 2; j++, k += 2) { arr[i][n - k] = arr[i - 1][n - k - 1] + arr[i - 1][n - k + 1]; arr[i][n + k] = arr[i - 1][n + k - 1] + arr[i - 1][n + k + 1]; } } if (flag == -1) { for (int j = 0, k = 0; j <= i / 2; j++, k += 2) { arr[i][n - k] = arr[i - 1][n - k - 1] + arr[i - 1][n - k + 1]; arr[i][n + k] = arr[i - 1][n + k - 1] + arr[i - 1][n + k + 1]; } } flag = -flag; } } void print(int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < 2 * n ; j++) { if (arr[i][j] != 0) { printf("%2d", arr[i][j]); } else { printf(" "); } } printf("\n"); } } //不正规的杨辉三角,排列不好看 void yangHuiTriangle(int n) { int data[30][30] = { 1 }; //第一行直接填好,播下种子 int i, j; for (i = 1; i < n; i++) //从第二行开始填 { data[i][0] = 1; //每行的第一列都没有区别,直接给1,保证不会越界。 for (j = 1; j <= i; j++) //从第二列开始填 { data[i][j] = data[i - 1][j] + data[i - 1][j - 1]; //递推方程 } } for (i = 0; i < n; i++) //填完打印 { for (j = 0; j <= i; j++) { printf("%d ", data[i][j]); } putchar(‘\n‘); } } //稍微改进,但是排列仍旧不够好看,不过由于是一维的,所以变简单了,但是每次只能保存最后一行的数据 void yangHuiTriangle1(int n) { int data[30] = { 1 }; int i, j; printf("1\n"); //第一行就直接打印了 for (i = 1; i < n; i++) //从第二行开始 { for (j = i; j > 0; j--) //从后向前填,避免上一行的数据在使用前就被覆盖 { data[j] += data[j - 1]; //公式同上,由于变成了一维,公式也变简单了。 } for (j = 0; j <= i; j++) //这一行填完就直接打印了。 { printf("%d ", data[j]); } putchar(‘\n‘); } } int main() { printf("请输入想要打印的行数:"); int n = 0; scanf("%d", &n); YangHuiTriangle(n); print(n); //yangHuiTriangle(n); //yangHuiTriangle1(n); return 0; }
//本次代码,写了三种不同的方法,第一种是我最满意的,完整打印了杨辉三角,包括排列的位置
//第二种和第三种不够成熟,虽然打印出了杨辉三角,但是排列不够完美
//第三种是最简单的一种,永远只保留最后一行,然后运算之后替换成下一行
标签:lib 简单的 int clu flag amp 方法 can lag
原文地址:https://www.cnblogs.com/zhm521/p/13959871.html