C语言,只有for循环编写杨辉三角,答得好加分。
解决时间 2021-02-06 11:35
- 提问者网友:了了无期
- 2021-02-06 03:42
#include
int main(void)
{
long i,j,n,k;
printf("杨辉三角:\n请输入行号,回车:");
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
k=1;
for(j=1;j{
printf("%ld ",k);
k=k*(i-j)/j;
}
printf("1\n");
}
return 0;
}
k=k*(i-j)/j; 这个公式,给个合理的解释。
我只是不明白这个公式怎么来的
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-02-06 05:14
例如:
1
1 1
1 2 1
1 3 3 1
说明:
#include
int main(void)
{
long i,j,n,k;
printf("杨辉三角:\n请输入行号,回车:");
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
k=1;
for(j=1;j
{
printf("%ld ",k); //从第2行开始每次进入该循环第一次打印的是每行开头的1
k=k*(i-j)/j; //这个用于计算第二行开始每行第一个1和最后一个1之间的数,例如第3行的2,第4
//行的 3 3
}
printf("1\n");//这个用于打印每行最后一列的1
}
return 0;
}
全部回答
1、以10层为例。定义一个int数组,赋初值为0,1,0...这样就把当前层的计算简化为用上一层的相邻2数相加,在输出当前数的同时把它存入数组对应位置,为下一层计算使用。
2、例程:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#define N 10
int main(void){
int i, j, a[N+1]={0};
printf("Yang-Hui triangle 10 layer:\n");
for(*(a+1)=i=1;i<=N;i++){//利用本层某位上一层左右2位之和求得
printf("%*c",1+((N-i)<<1),' ');//计算并移动到屏幕上合适的位置
for(j=i;j>=1;j--)
printf("%4d",*(a+j)+=*(a+j-1));//输出当前数并存入数组,供下一层计算用
printf("\n");
}
return 0;
}
- 2楼网友:枭雄戏美人
- 2021-02-06 06:21
如果只是输出不保存的话,可以这样实现,不写主函数了:
void printyanghui(int n) // 打印n行杨辉三角
{
int i, j;
for(i = 0; i < n ; i++) {
for(j = 0; j < n - i; j ++) printf(" ");
for(j = 0; j <= i; j ++) {
printf("%d ", c(i, j));
printf("\n");
}
}
int c(int i, int j)
{
int m, value;
if(j > (i+1) / 2)
j = i-j;
value = 1;
for(m = 0; m < j; m ++)
value = value * (i-m) / (m+1);
return value;
}
我要举报
大家都在看
推荐资讯