杨辉三角c语言程序一维数组
Ⅰ 怎样用一维数组写出c语言,输出杨辉三角的的前8行
#include
<stdio.h>
void
main()
{
int
yh[17][17]
=
{0};
int
i,j;
for
(
i
=
1;
i
<=
16;
i++)
{
for
(
j
=
1;j
<=
16;
j++)
{
yh[i][10
-
i
+
1]
=
yh[i][10
+
i
-
1]
=
1;
if(i
>
1)
{
yh[i][j]
=
yh[i
-
1][j
-
1]
+
yh[i
-
1][j
+
1];
}
}
}
for
(
i
=
1;
i
<=
8;
i++)
{
for
(
j
=
1;j
<=
17;
j++)
{
if(yh[i][j]
!=
0)
{
printf("%3d",yh[i][j]);
}
else
printf("
");
}
printf("\n");
}
}
这是本人自己写的代码,应该符合楼主的要求
不好意思没看清是一维数组,不好意思哈,不过网络有一些杨辉三角的C语言介绍,楼主可以参考一下
Ⅱ 详解C语言用数组表示杨辉三角........
杨辉三角形的六种解法
杨辉三角形是形如
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和。这个题目常用于程序设计的练习。
下面给出六种不同的解法。
解法一
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=0;i<n;i++)
a[i][0]=1; /*第一列全置为一*/
for(i=1;i<n;i++)
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];/*每个数是上面两数之和*/
for(i=0;i<n;i++) /*输出杨辉三角*/
{ for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
点评:解法一是一般最容易想到的解法,各部分功能独立,程序浅显易懂。
解法二
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={1};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<n;i++)
{ a[i][0]=1; /*第一列全置为一*/
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/
}
for(i=0;i<n;i++) /*输出杨辉三角*/
{ for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
点评:解窢二是在解法一的基础上,把第一列置为1的命令移到下面的双重循环中,减少了一个循环。注意初始化数组的变化。
解法三
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0,1};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/
for(i=1;i<=n;i++) /*输出杨辉三角*/
{ for(j=1;j<=i;j++) printf("%5d",a[i][j]);
printf("\n");
}
}
点评:解法三是在解法一、二的基础上,把第一列置为1的命令去掉了,注意初始化数组的变化。
解法四
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0,1};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<=n;i++)
{ for(j=1;j<=i;j++)
{ a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/
printf("%5d",a[i][j]); /*输出杨辉三角*/
}
printf("\n");
}
}
点评:解法四是在解法三的基础上,把计算和打印合并在一个双重循环中。
解法五
#include <stdio.h>
main()
{ int i,j,n=0,a[17]={1},b[17];
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=0;i<n;i++)
{ b[0]=a[0];
for(j=1;j<=i;j++)
b[j]=a[j-1]+a[j]; /*每个数是上面两数之和*/
for(j=0;j<=i;j++) /*输出杨辉三角*/
{ a[j]=b[j]; /*把算得的新行赋给a,用于打印和下一次计算*/
printf("%5d",a[j]);
}
printf("\n");
}
}
点评:解法一到解法四都用了二维数组,占用的空间较多。而解法五只使用了两个一维数组。
解法六
#include <stdio.h>
main()
{ int i,j,n=0,a[17]={0,1},l,r;
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<=n;i++)
{ l=0;
for(j=1;j<=i;j++)
{ r=a[j];
a[j]=l+r; /*每个数是上面两数之和*/
l=r;
printf("%5d",a[j]); /*输出杨辉三角*/
}
printf("\n");
}
}
点评:解法六只使用了一个一维数组和两个临时变量。
Ⅲ 用C语言数组,编写杨辉三角
#include<stdio.h>
int main()
{
int a[10][10],i,j;
for(i=0; i<10; i++)
{
for(j=10; j>=i; j--)
printf("%2c",' ');
for(j=0; j<=i; j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
printf("%3d ",a[i][j]);
if(i==j)
printf("\n");
}
}
return 0;
}
Ⅳ C语言利用一维数组编写杨辉三角
#include <stdio.h>
#define N 10 /* 要打印的层数 */
int main(void)
{
int arr[N]; /* 用于保存生成的杨辉三角的每一行的值 */
int i, j;
arr[0] = 1; /* 杨辉三角的第一层 */
/* 先把第一层打印出来 */
printf("%5d\n", arr[0]);
arr[1] = arr [0] = 1;//这样写是为了表明算法。
printf("%5d%5d\n", arr[0], arr[1]);
/* 不断地求杨辉三角的每一层 */
for (i = 2; i < N; i++) /* i代表当前层用到的arr的最大下标 */
{
arr[i] = arr[i-1]; /* 把最外边的1外移一位 */
for(j = i-1; j>0; j--)//每一行的a[0],始终为1,不用计算。
/* 用杨辉三角的性质求出层里里面的每一个数 */
{
/* 杨辉三角的性质就是这句 */
arr[j] = arr[j - 1] + arr[j];
}
/* 求出一行后,马上打印出此行 */
for (j = 0; j <= i; j++)
{
printf("%5d",arr[j]);
}
printf("\n");
}
return 0;
}
Ⅳ C语言编写 用数组输出杨辉三角十行
//C语言经典100例中的原题,给你,希望对你有帮助!
#include "stdio.h"
#include "conio.h"
main()
{
int i,j;
int a[10][10];
printf("\n");
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
getch();
}
Ⅵ C语言编写 用数组输出杨辉三角六行
#include "stdio.h"
#include "conio.h"
void main()
{ int n,i,j,k,a[20][20];
printf("please enter a n :\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{a[i][1]=1;a[i][i]=1;}
for(i=3;i<=n;i++)
for(j=2;j<i;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=1;i<=n;i++)
{ printf("\n");
for(j=1;j<=i;j++)
printf("%d ",a[i][j]);}
}
这个你输入6就出现你要的结果
你还可以输入其余数字 你输入几 就出现几行 最大为20行
Ⅶ c语言一维数组实现杨辉三角
#define N 135
main()
{
int a[N];
float i,j,k;
for(i=0;i<N;i++)
a[i]=0;
a[0]=1;
for(i=3,j=2;j<=N;i++)
{
a[j]=1;
a[j-1]=1;
j=j+i;
}
for(i=3,j=2;i<N;i++)
{
if(a[i]!=1)
{
a[i]=a[i-j]+a[i-j-1];
}
else
j+=0.5;
}
printf("\n\n");
for(i=0,j=2,k=2;i<N;i++)
{
if(i==k)
{
printf("\n");
j++;
k=k+j;
}
printf("%4d ",a[i]);
}
}
Ⅷ C语言,用数组输入杨辉三角
第一个问,是为了不让数组超界。
第二个问,同样,赋值这样是为了使得第一排的第一个数为1,这是杨慧三角的定义,顶角必须为1,否则后面的数字算不出来。其他的位置的值都是通过第一排的中间那个1(也就是a[0][10])算出来的,杨慧三角第n层的值和第n-1层有关。
第三个问,因为你中间计算的时候为了成图中的三角形,所以两个数中间隔了一个数,而这个数的值没有被赋值,因为这个位置不是杨辉三角的部分,所以就是你先前给他的那个0,因此当为0时输出空格
Ⅸ c语言程序杨辉三角
||#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={0};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数(大于0,小于17):");
scanf("%d",&n);
}
for(i=0;i<n;i++)
a[i][0]=1; /*第一列全置为一*/
for(i=1;i<n;i++)
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];/*每个数是上面两数之和内*/
for(i=0;i<n;i++) /*输出容杨辉三角*/
{ for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
//够简单了吧?
Ⅹ 杨辉三角,c语言编程,数组解决
楼主你好!!!
问题在于第二个for()循环,for(j=0;j<=9;j++),表示每行都要输出10个数,但是1-9行,都没10个数,所以后面的会是随机数!!!
应该为;for(j=0;j<=i;j++);