典型例题补充C语言求杨辉三角的7种方法

合集下载

杨辉三角用c语言怎么编程

杨辉三角用c语言怎么编程

#include<stdio.h>main(){long i,j,n,k;scanf("%ld",&n);for(i=1;i<=n;i++){k=1;for(j=1;j<i;j++){printf("%ld ",k);k=k*(i-j)/j;}printf("1\n");}}杨辉三角形是形如:11 11 2 11 3 3 11 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的命令移到下面的双重循环中,减少了一个循环。

c语言倒杨辉三角形

c语言倒杨辉三角形

c语言倒杨辉三角形1. 引言杨辉三角形是中国古代著名数学家杨辉发明的,它是从一个数开始,逐层递增形成的三角形,其中每个数等于它上方两数之和。

杨辉三角形在数学、计算机科学等领域有着广泛的应用。

本文将介绍用C语言编写倒杨辉三角形的实现方法。

2. 程序设计思路要倒着输出杨辉三角形,可以先从正着输出的杨辉三角形入手,然后将它们倒过来。

具体地,可以先计算出正着的杨辉三角形,存储在一个二维数组中;然后,从倒数第二行开始,每一行的每个元素都等于它下方两个元素之和,直到第一行结束。

最后,将倒着的杨辉三角形输出即可。

3. 正着输出杨辉三角形为了方便,我们先来编写正着输出杨辉三角形的代码。

代码如下:```cinclude <stdio.h>define N 10 // 杨辉三角形行数int main() {int a[N][N];// 初始化第一列for (int i = 0; i < N; i++) {a[i][0] = 1;}// 初始化斜对角线以上的元素for (int i = 1; i < N; i++) {for (int j = 1; j < i; j++) {a[i][j] = a[i-1][j-1] + a[i-1][j]; }}// 输出杨辉三角形for (int i = 0; i < N; i++) {for (int j = 0; j <= i; j++) {printf("%5d", a[i][j]);}printf("\n");}return 0;}```代码中,我们定义了一个二维数组a来保存杨辉三角形的每个元素。

首先,我们初始化第一列的元素为1;然后,我们依次计算出斜对角线以上的元素,每个元素都等于它上方两个元素之和。

最后,我们按行输出杨辉三角形。

程序输出如下:```11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1```4. 倒着输出杨辉三角形接下来,我们来编写倒着输出杨辉三角形的代码。

C语言杨辉三角是什么

C语言杨辉三角是什么

C语言杨辉三角是什么C语言杨辉三角是什么在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和。

这就是我们用C语言写杨辉三角的关键之一。

在高中的时候我们又知道,杨辉三角的任意一行都是的二项式系数,n为行数减1。

也就是说任何一个数等于这个是高中的.组合数。

n代表行数减1,不代表列数减1。

如:第五行的第三个数就为=6。

下面是店铺为大家搜索整理的C语言杨辉三角是什么,希望能给大家带来帮助!#include#includeint main(){int i,j,k;int line;int *prev, *next;printf("输入要查看杨辉三角的行数(大于2):");scanf("%d",&line);if(line < 2){printf("行数小于2,Goodbye!n");exit(1);}for(i=1; i<=line; i++) //前两行的打印printf(" ");printf("%6dn",1);for(i=1; i<=line-1; i++)printf(" ");printf("%6d%6dn",1,1);prev = malloc(2*sizeof(int));prev[0] = 1;prev[1] = 1;for(i=3; i<=line; i++) //从第三行开始打印{next = malloc(i*sizeof(int));next[0] = 1;next[i-1] = 1;for(j=line; j>=i; j--) //外部空格{printf(" ");}printf("%6d",1);for(k=2; k{next[k-1] = prev[k-2] + prev[k-1]; printf("%6d",next[k-1]);}}printf("%6dn",1);free(prev);prev = next;}free(next);return 0;}。

C语言 杨辉三角(数组)

C语言 杨辉三角(数组)
0743-杨辉三角(数组)
时间限制:
1000毫秒
内存限制:
32768 K字节
总提次数:
1643次
成功提交次数:
827次
判题规则:
严格比较
问题描述
杨辉三角具有以下性质:
1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。
2、第n行的数字个数为n个。
3、第n行数字和为2n − 1。
4、每个数字等于上一行的左右两个数字之和。
b[j]=a[j-1]+a[j];
for(j=0;j<=i;j++)
{
a[j]=b[j];
printf("%4d",a[j]);
}
printf("\n");
}
}
return 0;
}
出处
louxinhong
答案:
#include <stdio.h>
int main()
{
while(1)
{int i,j,n,a[13]={1},b[13];
scanf("%d",&n);
if(n==0)
return 0;
for(i=0;i<n;i++)
{
b[0]=a[0];
for(j=1;j<=i;j++)
输入
输入数据有多组
每组为正整数n(n<13).
n=0时程序结束。
输出
输出杨辉三角的前n行。每个数据占4位。
输入样列
8
0
输出样例
1
1 1
1 2 1
1 3 3 1

杨辉三角(数据结构c语言版)

杨辉三角(数据结构c语言版)

此是数据结构的杨辉3角程序,供学生上机操作(c语言),在vc++6.0下运行,结果如下:杨辉三角的行数:911 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 1Press any key to continue杨辉三角的行数:1211 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 11 10 45 120 210 252 210 120 45 10 11 11 55 165 330 462 462 330 165 55 11 1Press any key to continue#include<stdio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define MAXSIZE 50typedef int QueueElementType;typedef struct{QueueElementType element[MAXSIZE];int front;int rear;}SeqQueue;void InitQueue(SeqQueue *Q){Q->front=Q->rear=0;}int EnterQueue(SeqQueue *Q,QueueElementType x) {if((Q->rear+1)%MAXSIZE==Q->front)return(FALSE);Q->element[Q->rear]=x;Q->rear=(Q->rear+1)%MAXSIZE;return(TRUE);}int DeleteQueue(SeqQueue *Q,QueueElementType *x) {if(Q->front==Q->rear)return(FALSE);*x=Q->element[Q->front];Q->front=(Q->front+1)%MAXSIZE;return(TRUE);}int IsEmpty(SeqQueue *Q){if(Q->rear==Q->front)return(TRUE);else return(FALSE);}int GetHead(SeqQueue *Q,QueueElementType *x) {if(Q->front==Q->rear)return(FALSE);*x=Q->element[Q->front];return(TRUE);}void main(){int i,n,N,temp,x;SeqQueue Q;InitQueue(&Q);EnterQueue(&Q,1);printf("杨辉三角的行数:");scanf("%d",&N);for(n=2;n<=N;n++){ for(i=n;i<=N;i++)printf(" ");EnterQueue(&Q,1);for(i=1;i<=n-2;i++){DeleteQueue(&Q,&temp);printf(" ");printf("%3d",temp);GetHead(&Q,&x);temp=temp+x;EnterQueue(&Q,temp);}DeleteQueue(&Q,&x);printf(" ");printf("%3d",x);EnterQueue(&Q,1);printf("\n");}while(!IsEmpty(&Q)){DeleteQueue(&Q,&x);printf(" ");printf("%3d",x);}printf("\n");}。

用C语言写杨辉三角

用C语言写杨辉三角

#include <stdio.h>#include <stdlib.h>#include <e:\06.h>/*创建一个空的循环队*/PSeqQueue createEmptyQueue(int m){PSeqQueue p;p=(PSeqQueue)malloc(sizeof(struct SeqQueue));p->q=(DataType)malloc(sizeof(DataType)*m);if(p&&p->q!=NULL){p->MAXNUM=m;p->f=0;p->r=0;return p;}else printf("Out of space!!\n");return NULL;}/*判断队列是否是空队*/int isEmptyQueue_seq(PSeqQueue p){if(p->f==p->r) return 1;else return 0;}/*元素入队*/void enQueue_seq(PSeqQueue p,DataType x){if ( ( p ->r + 1) %p-> MAXNUM == p ->f)printf( "Full queue.\n" );else {p->q[ p->r] = x;p ->r = ( p ->r + 1) % p->MAXNUM;}}/*元素出队*/void deQueue_seq(PSeqQueue p){if ( p->f == p->r )printf( "Empty Queue.\n" );elsep->f = (p->f + 1) % p->MAXNUM;}/*当队列不为空时,取队头元素*/DataType frontQueue_seq(PSeqQueue p){if ( p->f == p->r )printf( "Empty Queue.\n" );elsereturn ( p->q[ p->f ]);}/*打印杨辉三角*/void YangHuiTriangle ( int N ){PSeqQueue p;int temp,new,i=1,m,n,j;printf("请输入要创空队的长度m\n");scanf("%d",&m);p=createEmptyQueue(m); /*创建一个大小为m的空队列*/printf("打印的%d行杨辉三角\n",N);enQueue_seq(p,1); /*第一行元素入队*/if(N==1) printf("%5d\n",i);else {for(j=0;j<N;j++)printf(" ");for(n=2;n<=N+1;n++){/*产生第n行元素并入队,同时打印第n-1行的元素*/enQueue_seq(p,1); /*第n行的第一个元素入队*/for(i=1;i<=n-2;i++){/*利用队中第n-1行元素产生第n行中间n-2元素并入队*/temp=frontQueue_seq(p); /*读队首元素到temp*/deQueue_seq(p); /*删除队首元素*/printf("%6d",temp); /*打印第n-1行元素*/new=frontQueue_seq(p); /*读队首元素到new*/temp=temp+new; /*利用队中第n-1行元素产生第n行元素*/enQueue_seq(p,temp); /*第n行元素入队*/}temp=frontQueue_seq(p); /*第n-1行最后一个出队*/deQueue_seq(p);printf("%6d\n",temp);/*打印第n-1行的元素*/for(j=i;j<N;j++)printf(" ");enQueue_seq(p,1); /*第n行最后一个元素入队*/}}}main(){int N,order=1;while(order){printf("请输入要打印的杨辉三角行数N\n");scanf("%d",&N);YangHuiTriangle (N);printf("继续打印请输入1,停止输入0,请输入:");scanf("%d",&order);}}。

杨辉三角形 c语言

杨辉三角形 c语言

杨辉三角形c语言1.引言1.1 概述杨辉三角形是一个经典的数学图形,它以数学家杨辉的名字命名。

杨辉三角形具有许多有趣的特点和应用,不仅在数学领域广泛应用,而且在计算机科学中也有重要的作用。

本文将介绍杨辉三角形的定义、特点以及它在C语言中的实现方法。

杨辉三角形是一个由数字构成的三角形,它的每个数字是由其上方两个数字相加得到的。

三角形的第一行只有一个数字1,从第二行开始,每个数字都是它上方两个数字的和。

杨辉三角形的形状不仅仅是一个三角形,它还具有许多有趣的数学特性,如对称性、数字排列规律等。

杨辉三角形在数学领域有广泛的应用。

它与二项式展开式密切相关,每一行的数字可以表示二项式系数。

通过杨辉三角形,我们可以轻松地计算组合数、排列数等数学问题。

此外,在统计学、概率论、组合数学等领域中也有许多应用。

在计算机科学中,杨辉三角形的生成方法可以通过编程语言来实现。

本文将以C语言为例,介绍如何使用C语言来生成杨辉三角形。

通过编写相应的算法,我们可以在计算机上生成杨辉三角形,并进行相关的操作,如打印、计算特定位置的数字等。

这对于学习C语言编程和理解算法有重要的意义。

本文的主要目的是介绍杨辉三角形的定义、特点以及在C语言中的实现方法。

通过深入理解杨辉三角形的数学特性和编程实现,读者可以更好地掌握相关的知识和技能。

同时,本文还将探讨杨辉三角形的应用和拓展,展示它在实际问题中的价值和潜力。

希望读者通过本文的学习,能够对杨辉三角形有更深入的了解,并能够运用到实际的计算和研究中。

1.2文章结构1.2 文章结构本文将按照以下结构进行阐述杨辉三角形在C 语言中的实现:1. 引言:介绍杨辉三角形以及本文的目的和意义。

2. 正文:2.1 杨辉三角形的定义和特点:详细介绍杨辉三角形的概念、特点以及其在数学中的应用。

说明杨辉三角形左右对称、每行的第一个和最后一个数均为1、每个数等于它上方两数之和等特点。

2.2 杨辉三角形的生成方法:讲解杨辉三角形的生成方法,包括递推法和组合恒等式法。

杨辉三角_用c语言的一些整理

杨辉三角_用c语言的一些整理

杨辉三角用c语言怎么编程#include<stdio.h>main(){long i,j,n,k;scanf("%ld",&n);for(i=1;i<=n;i++){k=1;for(j=1;j<i;j++){printf("%ld ",k);k=k*(i-j)/j;}printf("1\n");}}#define N 13 //定义三角最大行,可自行设定,但最大不要超过65536;#include <stdio.h>main(){int n,i,j;int a[N+1][2*N+4];printf("How Many Rows Do You Want:(Number Must Below Or Equal %d)\n",N); scanf("%d",&n);if(n>N){printf("What You Input Is Big Than What We Provide!\n");exit(1);}//初始化数组;for(i=1;i<=n;i++){for(j=-1;j<2*n+2;j++){a[i][j]=0;}}a[1][n]=1;//设置杨辉三角的数值;for(i=1;i<=n;i++){for(j=1;j<2*n;j++){if(a[i][j]!=0){a[i+1][j-1]=a[i][j-2]+a[i][j];a[i+1][j+1]=a[i][j+2]+a[i][j];}}}//打印杨辉三角;for(i=1;i<=n;i++){for(j=1;j<2*n;j++){if(a[i][j]!=0){printf("%3d",a[i][j]); //打印格式自设,如加“\t”或空格等;} //主要是为了打印的图像美观;else{printf(" ");}if(j==(2*n-1)){printf("\n");}}}}#include <stdio.h>#include <conio.h>void main(){int i,j,k,n;static int a[50][50];printf("Input lines\n",&n);scanf("%d",&n);a[1][1]=a[2][1]=a[2][2]=1;for(i=3;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 (k=1;k<=n-i;k++)printf(" ");for(j=1;j<=i;j++)printf("%2d ",a[i][j]);printf("\n");}getch();}在80字符的屏幕上输出杨辉三角,要求1在中间,形如1 /*第0行*/ 1 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1大家知道利用数组数组的方法输出杨辉三角是一件比较容易的事情,在许多的教材上都能够找到,而且计算速度比较快,但是有个缺点就是当输出的阶数比较大的时候,需要占用较多的存储空间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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的命令去掉了,注意初始化数组的变化。
{
fun(a,n);
printf("Case %d:\n",k++);
for(i=0;i<n;i++)
{
for (j = 0; j < n - i; j ++)
printf(" ");
for(j=0;j<=i;j++)
{
if(j==i)
printf("%d",a[i][j]);
else
printf("%d ",a[i][j]);
杨辉三角形是形如
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和。这个题目常用于程序设计的练习。
下面给出六种不同的解法。
解法一
#include <stdio.h>
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的命令移到下面的双重循环中,减少了一个循环。注意初始化数组的变化。
for(j=0;j<=i;j++)
{
if(i==j)
a[i][j]=1;
else if(j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
int main()
{
int i,j,k,n;
int a[34][34];
k=1;
while(scanf("%d",&n)==1) //输入你要显示的行数,如1,2,3,4,...
解法三
#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=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]={0,1};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<=n;i++)
{ for(j=1;j<=i;j++)
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]; /*每个数是上面两数之和*/
解法二
#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; /*第一列全置为一*/
{ a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/
printf("%5d",a[i][j]); /*输出杨辉三角*/
}
printf("\n");
}
}
点评:解法四是在解法三的基础上,把计算和打印合并在一个双重循环中。
解法五
#include <stdio.h>
for(j=0;j<=i;j++) /*输出杨辉三角*/
{ a[j]=b[j]; /*把算得的新行赋给a,用于打印和下一次计算*/
printf("%5d",a[j]);
}
printf("\n");
}
}
点评:解法一到解法四都用了二维数组,占用的空间较多。而解法五只使用了两个一维数组。
解法六
#include <stdio.h>
l=r;
printf("%5d",a[j]); /*输出杨辉三角*/
}
printf("\n");
}
}
点评:解法六只使用了一个一维数组和两个临时变量。
补充:输入等腰三角形形状的杨辉三角:
#include<stdio.h>
void fun(int a[][34],int n)
{
int i,j;
for(i=0;i<n;i++)
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; /*每个数是上面两数之和*/
}
printf("\n");
}
printfபைடு நூலகம்"\n");
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++)
相关文档
最新文档