• 维数组实现： 代码： #include #include int main(){ int row,i,size=0,j=3; printf("Please enter rows(Only integer allowed): "); if(!scanf("%d", &row)) {
一维数组实现：

代码：

#include <stdio.h>
#include <stdlib.h>

int main()
{
int row,i,size=0,j=3;
printf("Please enter rows(Only integer allowed): ");
if(!scanf("%d", &row))
{
return -1;
}

for(i=1; i<=row; i++)
{
size += i;
}

int arr[size];

arr[0] = 1;
arr[1] = 1;
arr[2] = 1;
for(i=2; i<row; i++)
{
int n = j;
for(;j<=n+i; j++)
{
if(j==n || j==(n+i))
arr[j] = 1;
else
arr[j] = arr[j-i-1] + arr[j-i];
}
}

j=1;
row=1;
for(i=0;i<size;i++)
{
printf("%d ",arr[i]);
if(j % row == 0)
{
printf("/n");
row++;
j=row;
}
j++;
}
return 0;
}

运行结果：

Please enter rows(Only integer allowed): 15
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
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1

Process returned 0 (0x0)   execution time : 1.572 s

二维数组实现：

代码：

#include <stdio.h>
#include <stdlib.h>

int main()
{
int row,i,j,n;
printf("Please enter a number of rows(Note: only integer allowed): ");
n = scanf("%d", &row);
//Check if the number is legal.
if(0 == n)
{
return 1;
}
int arr[row][row];

for(i=0; i<row; i++)
for(j=0; j<row; j++)
{
if(i == j || 0 == j)
arr[i][j] = 1;
else
arr[i][j] = 0;
}

for(i=2; i<row; i++)
for(j=1; j<i; j++)
{
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}

for(i=0; i<row; i++)
{
for(n=(row-i-1); n>0; n--)
printf("  ");
for(j=0; j<row; j++)
{
if(arr[i][j] != 0)
{
printf("  %d  ",arr[i][j]);
}

}
printf("/n");
}
return 0;
}
运行结果：

Please enter a number of rows(Note: only integer allowed): 15
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
1    10    45    120    210    252    210    120    45    10    1
1    11    55    165    330    462    462    330    165    55    11    1
1    12    66    220    495    792    924    792    495    220    66    12    1
1    13    78    286    715    1287    1716    1716    1287    715    286    78    13    1
1    14    91    364    1001    2002    3003    3432    3003    2002    1001    364    91    14    1

Process returned 0 (0x0)   execution time : 1.685 s


展开全文
• 知识点：杨辉三角形（B站李永乐），二维数组的存储，如何循环遍历二维数组 //编程打印直角杨辉三角形 //知识点：杨辉三角形，二维数组的循环 #include <stdio.h> int main(void) { int i, j, a[6][6]; for...
时间：2020年9月13日 17:17:16
知识点：杨辉三角形（B站李永乐），二维数组的存储，如何循环遍历二维数组
//编程打印直角杨辉三角形
//知识点：杨辉三角形，二维数组的循环

#include <stdio.h>

int main(void)
{
int i, j, a[6][6];
for (i = 0; i <= 5; i++)
{
a[i][i] = 1;
a[i][0] = 1;
}
for (i = 2; i <= 5; i++)  // 从杨辉三角形第3行开始，一直到第6行为止
for (j = 1; j <= i - 1; j++)  // 从杨辉三角形第2列开始，一直到第5列
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
for (i = 0; i <= 5; i++)
{
for (j = 0; j <= i; j++)
printf("%4d", a[i][j]);
printf("\n");
}
return 0;
}

// a[i][i] = 1;
// a[0][0] = 1; a[1][1] = 1; a[2][2] = 1; a[3][3] = 1; a[4][4] = 1; a[5][5] = 1;
// a[i][0] = 1;
// a[0][0] = 1; a[1][0] = 1; a[2][0] = 1; a[3][0] = 1; a[4][0] = 1; a[5][0] = 1;

运行结果：

--------------------------------//--------------------------------------
指针与二维数组


展开全文
• void YHTriangle(int Row)//参数传入打印的... //按照给定的行数在堆空间上申请二维数组用来存放杨辉三角。 int **arr = (int **)malloc(sizeof(int *)*Row); for (i = 0; i < Row; i++) { arr[i] = (int ...
void YHTriangle(int Row)//参数传入打印的行数。
{
assert(Row > 0);
int i, j;
//按照给定的行数在堆空间上申请二维数组用来存放杨辉三角。
int **arr = (int **)malloc(sizeof(int *)*Row);
for (i = 0; i < Row; i++)
{
arr[i] = (int *)malloc(sizeof(int)*Row);
memset(arr[i], 0, sizeof(arr[i]));
}
assert(NULL != arr);
//初始化

arr[0][0] = 1;//初始化第一行的数据。
int CurrentRow = 1;//从第二行开始初始化二维数组//Current表示正在处理的当前行
for (i = 1; i < Row; i++)
{
//每行第一个和最后一个都是1
arr[i][0] = 1;
arr[i][CurrentRow] = 1;
for (j = 1; j < CurrentRow; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//除了第一个和最后一个元素，其余的值都为上一行相邻的俩个元素之和。
}
CurrentRow++;//当前行加1
}

//打印二维数组就是杨辉三角

CurrentRow = 1;
int SaveRow = Row;//保存当前行的值，用于打印制表符
int k;
for (i = 0; i < Row; i++)
{
for (k = 0; k < SaveRow - 1; k++)printf("\t");//为了更加直观的看到杨辉三角的格式。
for (j = 0; j < CurrentRow; j++)
{
printf("\t%d\t", arr[i][j]);
}
printf("\n");
SaveRow--;
CurrentRow++;
}
//释放空间
for (i = 0; i < Row; i++)
{
free(arr[i]);
}
free(arr);

}

运行结果：


展开全文
• Python语言实现杨辉三角 杨辉三角是什么
C语言实现杨辉三角（二维数组）
杨辉三角是什么
杨辉三角，是二项式系数在三角形中的一种几何排列，中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲，帕斯卡（1623----1662）在1654年发现这一规律，所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年，比贾宪迟600年。（这里中国的老祖宗还是很厉害的）
实现效果

默认状态下不使用金字塔或者菱形输出，多半采用正三角形
题目分析

整体上看这是一个正三角行，行和列数是相等的；
继续会发现，第一列和对角线上的数字全为1。在二维数组中就可以用(i==0)和(i==j)来分别表示第一列和对角线，这是只要在这个条件下输出为1就可以；
深入研究图形后，我们会看到第i行第j列的数字是由第i-1行第j列的数字加上第i-1行第j-1列的数字构成的，在二位数组里面就是**假设数组名称是array，那么换成代码表示就是array[i][j]=a[i-1][j]+a[i-1][j-1]，这个式子是二维数组解决杨辉三角的核心；
最后完成杨辉三角的构建后，我们还需要将其输出出来，也就是用循环嵌套输出二维数组（我相信这一步没有任何难度）。

代码实现
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int a[100][100];
int i,j;
int n;
printf("请输入行数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(j==0 || i==j)//在第一列或者在对角线上
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
}
//输出杨辉三角
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}

}

只有二维数组这一种方法吗？
当然不是，这是笔者喜欢使用的一种实现杨辉三角的方法，在这里给大家分享，但是杨辉三角还有另一种常见实现方式，那就是递归的方式。还可以用二维数组但不使用循环嵌套而使用递归的方法。总之，达到目的有很多种，但是一定要选择最适合自己的一种。
其他语言的实现方式
笔者阅读了其他多种语言的杨辉三角实现方法，包含了C++、Java、Python、C#、Bash，这里也给大家呈现一下：
C++
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
const int n = 15;
const int m = 2 * n-1;
int arr[n + 1][m] = { 0 };
for (int i = 0; i < n; i++)
{
arr[i][n - i- 1] = 1;
arr[i][n + i -1] = 1;

}
for (int i = 2; i < n; i++)
{
for (int j = n - i + 1; j < n-2+i; j = j + 2)
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j + 1];
}
int p;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i - 1; j++)
cout << "    ";
p = 1;
for (int j = n - i - 1; p < i + 2; j = j + 2)
{
cout << setw(4) << arr[i][j] << "    ";
p = p + 1;
}
cout << endl;
}
return 0;
}

Java
public class TriangleArray
{
public static void main(String[] args)
{
final int NMAX = 10;

// allocate triangular array
int[][] odds = new int[NMAX + 1][];
for (int n = 0; n <= NMAX; n++)
odds[n] = new int[n + 1];

// fill triangular array
for (int n = 0; n < odds.length; n++)
for (int k = 0; k < odds[n].length; k++)
{
/*
* compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)
*/
int lotteryOdds = 1;
for (int i = 1; i <= k; i++)
lotteryOdds = lotteryOdds * (n - i + 1) / i;

odds[n][k] = lotteryOdds;
}

// print triangular array
for (int[] row : odds)
{
for (int odd : row)
System.out.printf("%4d", odd);
System.out.println();
}
}
}

C#
class Program
{
public int yanghui(int value)
{
if(value<3) return 1;
int[,]arry=new int[value,value];
Console.WriteLine("数组为：");
for(int i=0;i<value;i++)
{
string str="";
Console.Write(str);
for(int j=0;j<=i;j++)
{
if(i==j||j==0)
arry[i,j]=1;
else
arry[i,j]=arry[i-1,j-1]+arry[i-1,j];
Console.Write(arry[i,j]+"");
}
Console.WriteLine();
}
}

static void Main(string[]args)
{
Program p=new Program();
Console.WriteLine("请输入数组值：");
Console.WriteLine("输入数值必须大于3");
}

}

Python
# -*- coding: utf-8 -*-
#!/usr/bin/env python
def triangles():
L = [1]
while True:
yield L
L = [sum(i) for i in zip([0]+L, L+[0])]
该方式用到了列表生成式，理解起来较困难，下面是另一种方式：

def triangles():
ret = [1]
while True:
yield ret
for i in range(1, len(ret)):
ret[i] = pre[i] + pre[i - 1]
ret.append(1)
pre = ret[:]

PHP
<?php
$max = 10;$L = [1];
var_dump($L);$L = [1,1];
var_dump($L);$n = 2;
while ($n <=$max - 1){
$oldL =$L;
$L[$n] = 1;
$n++; for ($i = 1;$i <count($oldL);$i++){$L[$i] =$oldL[$i-1] +$oldL[$i]; } var_dump($L);
}
?>

我们可以清晰的看到，Python语言是多种语言里最方便的代码量最少的，所以大家可以跟着我一起学习Python（同时笔者也在教授高中生Python），在学习Python的过程中，笔者会经常给大家更新和讲解一些经典案例，关注我吧！！


展开全文
• 杨辉三角数组做法就是将杨辉三角的结构虚拟成一个二维数组，通过二维数组杨辉三角的规律得出一个算法来 算法即为:a[i][j] = a[i-1][j-1]+a[i-1][j]; 一定要注意 arr(0,0) 一定为1 这是整个杨辉三角的计算核心。...
• 杨辉三角 二维数组C语言编写的程序,程序清除明了
• 利用二维数组 #include<stdio.h> #define ROW 10 int main() { int arr[ROW][ROW]; int i; int j; for (i = 0; i < ROW; i++) { for (j = 0; j <= i; j++) { if (j == 0 || j == i)//给第一...
• 只定义二维数组：</li><li> <code>#include<stdio.h> int main(void) { int row; printf("please input row number:"); scanf("%d",&row); //通过输入指定输出的三角形行数 ...
• #include "stdio.h"void yhsj(int x) //输出杨辉三角{int b j; for(i=0;i;i++) {sz[i][0]=1; sz[i][i]=1; } for(i=2;i;i++) for(j=1;j;j++) sz[i][j]=sz[i-1][j-1]+sz[i-1][j]; for(i=0;i;i++) for(j=0;j;j++) {...
• 二维数组 1、定义方式 <数据类型><数组名>[常量表达式1][常量表达式2] 其中，常量表达式1（行）可省略，常量表达式2（列）不可省略。 2、存放顺序：行序优先； 例： int a[3][2] 存储方式如下表所示： ...
• C语言用一位数组和二维数组打印杨辉三角
• C语言利用二维数组打印出以下的杨辉三角形（要求打印十行） 代码如下： #include<stdio.h> void main() { int a[10][10],i,j; for(i=0;i<10;i++) //初始化数组 { for(j=0;j<10;j++) a[i][j...
• C语言实现杨辉三角二维数组） 一、设计思路 先根据已知的数列将杨辉三角的规律找出来，然后利用数组将各个元素间的规律用表达式表示出来，最后将整个二维数组打印出来，实现杨辉三角。 二、规律 1 1 1 1 2 1 1 ...
• C语言编写的杨辉三角，使用二维数组加上循环嵌套。是在学完二维数组后的经典练习题目，主要供给给初学C语言的同学参考是使用
• ## c语言：二维数组输出杨辉三角！

万次阅读 多人点赞 2011-04-07 19:18:00
今天做了杨辉三角的题目。在草稿上面写好了思路，回到宿舍就开始开始敲代码。就几行，不过调试的时候搞错了两个地方，一个是i=j还有一个是j=0；好久不搞这个，居然犯这么低级的错误！，改好之后就好了！ 杨辉三角你...
• C语言，一定绕不过指针这一大难关，而指针最让人头疼的就是各种指向关系，一阶的指针还比较容易掌握，但一旦阶数一高，就很容易理不清楚其中的指向关系，现在我将通过杨辉三角为例，我会用四种方法从内存的角度...
• 使用二维数组存储杨辉三角，可以实现一次计算多次使用。 使用一维数组存储杨辉三角，需要更高的技巧。 #include <stdio.h> int pascal[30+1]; // 使用一维数组的杨辉三角程序 void pascalgo(int n) { int ...
• 二维数组的赋值：打印杨辉三角形（要求打印8行）
• C语言杨辉三角 #include<stdio.h>//头文件 int main()//主函数入口 { int i,j;//定义整型变量 int a[10][10];//定义二维数组 for(i=0;i<10;i++)//for循环 { a[i][i]=1;//给二维数组的每一行的...
• 杨辉三角形特点是每个元素都等于它正上方与左上方数之和，于是可以计算出除第一列第一行外的所有元素 ...用传统的二维数组来存放杨辉三角是行不通的（C语言不允许使用变量当做数组的维数，int a[n][n]，是行不
• 杨辉三角形又称帕斯卡三角形，其余的话就不多说，先看下面的三角形：  1  1 1  1 2 1  1 ...
• 二维数组打印杨慧三角 让我们用C语言来打印出高中让我们头疼的杨慧三角，话不多说，上代码 我们先创建一个二维数组，并初始化为0，定义两个整形变量i，j控制行数和列数i，再定义一个n用来接受打印的行数 int a...
• 杨辉三角是中国古代数学的杰出研究成果之一，它把项式系数图形化，把组合数内在的一些代数性质直观地从图形中体现出来，是一种离散型的数与形的结合。   我们把行数定义为n，即第一行为...
• 两种方式打印杨辉三角 ... /*定义二维数组a[14][14]*/ // while(n<=0||n>=13){ /*控制打印的行数不要太大，过大会造成显示不规范*/ // printf("请输入要打印的行数："); // scanf("%d",&n); // } // pr
• #include int *printYangHuiByNLine(int rows); void main() { int exponent; int again=1;... printf("-------------------------项式展开-----------------------------\n"); while(again==1) {

...

c语言 订阅