利用高中学的组合数C++编程输出杨辉三角

合集下载

c语言杨辉三角形代码

c语言杨辉三角形代码

c语言杨辉三角形代码杨辉三角形是中国古代数学中较为重要的数学问题之一,也是计算机领域中经典的问题之一。

它形成一个三角形,数字排列成三角形形状,其中每个数字等于它上方两数字之和。

以下是一个用C语言编写的杨辉三角形代码:#include <stdio.h>int main() {int rows, coef = 1;printf("请输入行数: ");scanf("%d", &rows);for (int i = 0; i < rows; i++) {for (int space = 1; space <= rows - i; space++)printf(" ");for (int j = 0; j <= i; j++) {if (j == 0 || i == 0)coef = 1;elsecoef = coef * (i - j + 1) / j;printf("%4d", coef);}printf("\n");}return 0;}在这个代码中,我们首先定义一个整数变量rows来表示杨辉三角形的行数。

然后通过用户输入来获取杨辉三角形的行数。

接着我们使用两个嵌套循环来打印杨辉三角形。

外层循环用来控制打印的行数。

内层循环用来打印每一行的数字。

在内层循环中,首先使用一个循环打印空格,使得每行的数字能够居中显示。

其次,在这个循环中,我们使用一个if语句来判断当前位置是否为杨辉三角形的边界,也就是第一个数字和每一行的最后一个数字。

如果是边界上的数字,我们将其设置为1,否则就使用前一行的数字通过组合公式计算当前位置的数字。

最后我们在内层循环的末尾打印一个换行符,以便换行显示下一行。

运行以上代码,将会看到打印出指定行数的杨辉三角形。

这个代码是很简单但有效的实现了杨辉三角形的打印。

杨辉三角的简单实现(C++)

杨辉三角的简单实现(C++)

21
22
cout << a[i][j];
23
}
24
cout << endl;
25 }
26
27 return 0;
28 }
在求解杨辉三角时,注意j的值为1以及j和i的值相等的时,将该位置赋值为1。其它情况下(数不在行首或行尾),由之前所得结论:该 数等于其上一行同一列数字和其前一数字的和来赋值。
1 a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
1 //YangHuisanjiao 输入行数,输出三角
2 #include<iostream>
3 using namespace std;
4 #define N 35
5
6 int main()
7{
8 int a[N][N];
9 int n, i, j;
10 cin >> n;
11 for (i = 1;i <= n;i++)
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
杨辉三角的简单实现( C++)
杨辉三角是二项式系数在三角形中的一种几何排列,其特点是三角每一行第一个数和最后一个数都是1,如果一个数不是行首或行尾, 则该数等于其上一行同一列数字和其前一数字的和。
ቤተ መጻሕፍቲ ባይዱ示例:
1 10 2 31 4 11 5 121 6 1331 7 14641 8 1 5 10 10 5 1 9 1 6 15 20 15 6 1 10 1 7 21 35 35 21 7 1 11 1 8 28 56 70 56 28 8 1 12 1 9 36 84 126 126 84 36 9 1

用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语言程序引言杨辉三角形是数学中一种经典的图形,它具有许多有趣的性质和应用。

在本文中,我们将使用C语言编写一个程序来打印杨辉三角形。

通过分析程序实现过程和结果展示,我们可以深入探讨杨辉三角形的形成规律和数学性质。

程序实现过程步骤一:确定杨辉三角形的行数在开始编写程序之前,我们需要确定要打印的杨辉三角形的行数。

用户可以通过程序输入或者直接在代码中指定。

步骤二:创建二维数组我们将使用一个二维数组来存储杨辉三角形的数字。

数组的行数等于用户指定的行数,而每一行的列数等于该行的索引加1。

例如,第一行只有一个数字,第二行有两个数字,以此类推。

步骤三:初始化数组在创建数组后,我们需要对其进行初始化。

杨辉三角形的第一行和第一列的值都是1,其他位置的值等于其上方数字与左上方数字之和。

步骤四:打印杨辉三角形通过循环遍历数组,并将其值打印出来,我们可以在控制台上输出杨辉三角形的图形。

程序代码示例下面是使用C语言编写的打印杨辉三角形的程序:#include <stdio.h>// 定义最大行数#define MAX_ROWS 10int main() {int rows, coef = 1, space, i, j;// 获取用户输入的行数printf("请输入杨辉三角形的行数:");scanf("%d", &rows);// 判断行数是否超过最大行数rows = (rows > MAX_ROWS) ? MAX_ROWS : rows;// 打印杨辉三角形for(i = 0; i < rows; i++) {for(space = 1; space <= rows - i; space++) printf(" ");for(j = 0; j <= i; j++) {if (j == 0 || i == 0)coef = 1;elsecoef = coef * (i - j + 1) / j;printf("%4d", coef);}printf("\n");}return 0;}程序结果展示通过运行上述代码,我们可以得到以下结果示例:请输入杨辉三角形的行数:611 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1杨辉三角形的数学性质杨辉三角形具有许多有趣的数学性质,下面我们将逐一探讨一些常见的性质:性质一:对称性杨辉三角形是关于中心对称的,也就是每一行的数字从中间开始以对称的方式排列。

C++输出上三角下三角菱形杨辉三角形

C++输出上三角下三角菱形杨辉三角形

C++输出上三⾓下三⾓菱形杨辉三⾓形1.输出上三⾓形第⼀⾏1个星,第⼆⾏3个星,第三⾏5个星,第四⾏7个星,第五⾏9个星。

分析:三⾓形的形状由输出的空⽩和星组成,通过分析每⼀⾏输出⼏个空格,⼏个星,就可完成输出三⾓形的⼯作。

#include<iostream>using namespace std;int main(){int i=0,j=0;for(i=1;i<=5;i++){//控制⾏数for(j=1;j<=(5-i);j++){cout<<" ";//控制输出空格}for(j=1;j<=(2*i-1);j++){cout<<"*";//控制输出*}cout<<endl;//每⼀⾏进⾏换⾏}return 0;}2.输出下三⾓第⼀⾏9个星,第⼆⾏7个星,第三⾏5个星,第四⾏3个星,第五⾏1个星。

分析:该图形与上三⾓图形相反,思路类似。

#include<iostream>using namespace std;int main(){int i=0,j=0;for(i=1;i<=5;i++){//控制⾏数for(j=1;j<=(i-1);j++){cout<<" ";}for(j=1;j<=(9-2*(i-1));j++){cout<<"*";}cout<<endl;}}3.输出菱形菱形其实就是由⼀个上三⾓和⼀个下三⾓组成。

可以通过两次for循环输出#include<iostream>using namespace std;int main(){int i=0,j=0;for(i=1;i<=5;i++){cout<<"\t";for(j=1;j<=(5-i);j++){cout<<" ";}for(j=1;j<=(2*(i-1)+1);j++){cout<<"*";}cout<<endl;}for(i=4;i>=1;i--){cout<<"\t";for(j=1;j<=(5-i);j++){cout<<" ";}for(j=1;j<=(2*(i-1)+1);j++){cout<<"*";}cout<<endl;}cout<<endl;}4.输出杨辉三⾓111121133114641151010511615201561172135352171 18285670562881 193684126126843691杨辉三⾓形最显著的特点就是每个数等于它上⽅两数之和。

C语言求杨辉三角的6种方法

C语言求杨辉三角的6种方法
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++) /*输出杨辉三角*/
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和。这个题目常用于程序设计的练习。
下面给出六种不同的解法。
{ a[j]=b[j]; /*把算得的新行赋给a,用于打印和下一次计算*/
printf("%5d",a[j]);
}
printf("\n");
}
}
点评:解法一到解法四都用了二维数组,占用的空间较多。而解法五只使用了两个一维数组。
解法六
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++)
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");

C语言实现打印杨辉三角的方法详细(三种方法)

C语言实现打印杨辉三角的方法详细(三种方法)

C语⾔实现打印杨辉三⾓的⽅法详细(三种⽅法)⽬录题⽬描述问题分析1. 使⽤数组法(打印直⾓三⾓)2. 使⽤数组法(打印等腰三⾓)3. 使⽤公式法(打印等腰三⾓)⽹上参考题⽬描述打印杨辉三⾓(前N⾏)问题分析杨辉三⾓是中国古代数学的杰出研究成果之⼀,它把⼆项式系数图形化,把组合数内在的⼀些代数性质直观地从图形中体现出来,是⼀种离散型的数与形的结合。

杨辉三⾓的部分规律:1. 每个数等于它上⽅两数之和。

2. 每⾏数字左右对称,由1开始逐渐变⼤。

3. 第n⾏的数字有n项。

4. 第n⾏的m个数可表⽰为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。

根据前三个规律,我们可以使⽤数组法获取杨辉三⾓;根据后两个规律,我们可以使⽤公式法求出每⾏每列的数字。

数组法思路:先根据设定的⾏数定义⼀个⼆维数组,然后使⽤⼀个双层循环,外层循环的因数为杨辉三⾓的⾏数,内层循环⽤来将杨辉三⾓每⾏的数字存⼊数组。

每⾏第⼀列和最后⼀列都是1,中间的数字等于它上⽅两数之和。

最后再通过两层循环将⼆维数组中的数字打印。

公式法思路:由于杨辉三⾓满⾜上⾯提到的第4点规律,所以我们可以直接定义⼀个函数求出杨辉三⾓第n⾏的m个数的值。

组合数公式根据上⾯这个组合的公式,我们可以使⽤阶乘及相关计算,求出杨辉三⾓形的每个数,同时打印出来。

1. 使⽤数组法(打印直⾓三⾓)打印直⾓形式的杨辉三⾓形,即打印⼆维数组时不加空格代码#include <stdio.h>#define LINE_MAXIMUM 10 //⾏数int main(){int i = 0, j = 0;int array[LINE_MAXIMUM][LINE_MAXIMUM] = {0};/* 填充⼆维数组 */for(i = 0; i < LINE_MAXIMUM; i++) //⾏数{for(j = 0; j <= i; j++) //每⾏的列数(第n⾏的数字有n项){if(j == 0 || j == i) //每⾏第⼀列和最后⼀列为1array[i][j] = 1;else //每个数等于它上⽅两数之和array[i][j] = array[i - 1][j - 1]\+ array[i - 1][j];}}/* 打印杨辉三⾓(直⾓) */for(i = 0; i < LINE_MAXIMUM; i++){for(j = 0; j <= i; j++)printf("%d ", array[i][j]);printf("\n");}return 0;}运⾏结果2. 使⽤数组法(打印等腰三⾓)打印等腰形式的杨辉三⾓形,需要在每⾏前⾯加若⼲空格,空格的宽度需要根据数字的宽度调整,使三⾓形对称。

c语言杨辉三角形代码

c语言杨辉三角形代码

c语言杨辉三角形代码杨辉三角形是一种由数字组成的三角形,其中每个数字是它上方两个数字的和。

该三角形以前数学家杨辉的名字命名,其结构如下:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1下面以C语言编写一个打印杨辉三角形的代码示例:```c#include <stdio.h>void printYanghuiTriangle(int n) {int triangle[n][n];// 初始化数组元素为0for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {triangle[i][j] = 0;}}// 计算杨辉三角形for (int i = 0; i < n; i++) {triangle[i][0] = 1;triangle[i][i] = 1;if (i >= 2) {for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; }}}// 打印杨辉三角形for (int i = 0; i < n; i++) {// 添加空格,使三角形居中显示for (int k = 0; k < n - i - 1; k++) {printf(" ");}for (int j = 0; j <= i; j++) {printf("%d ", triangle[i][j]);}printf("\n");}}int main() {int n;printf("请输入杨辉三角形的行数:");scanf("%d", &n);// 打印杨辉三角形printYanghuiTriangle(n);return 0;}```上述代码中,我们定义了一个`printYanghuiTriangle`函数来打印杨辉三角形,并在`main`函数中通过用户输入的行数调用该函数进行打印。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
y=c(i,j);
cout<<" "<<y;
}
cout<<"\n";//*杨辉三角每行自动回车换行。
}
return 0;
}
输出样例如下图:
return 1;
else
/*return a*x(a-1);*/
{
for(i=1;i<=a;i++)
k=k*i;
}
return k;
}
double c(int n,int m) //*杨辉三角中任一项的等于组合数C(n,m)=(n-1)!/((m-1)!*(n-m)!)
{double y;
y=x(n-1)/(x(m-1)*x(n-m));
cin>>n;
}
cout<<"用高中学的组合数编程输出杨辉三角是:\n";
for(i=1;i<=n;i++)//外循环控制杨辉三角行数。
{Hale Waihona Puke for(k=1;k<=(n-i);k++)//*第一个内循环在打印第一个数字前空处几个空格,空格的数量是总行数减去当前的行数。
cout<<" ";
for(j=1;j<=i;j++) //*第二个内循环输出杨辉三角每一行中的数。如第一行1个数,第二行2个数,...第五行5个数。
#include<iostream>// *用高中学的组合数编程输出杨辉三角!
using namespace std;
double x(int a)//*自定义了一个求阶乘的函数(可以用常规的阶乘求法,亦可以用递归法求阶乘),以便后面程序使用。
{
int i;
double k=1;
if ( a==0 || a==1)
return y;
}//*以上定义了一个组合数函数
double main(void)//*程序主体为了输出一个杨辉三角图形。
{ int i,j,n,k;
double y;
while (n<=3||n>=20) //*此段程序是提示用户输入要的多少行杨辉三角。
{
cout<<"请输入一个(3~20)正整数即行数:";
相关文档
最新文档