为什么不输出最外边(右上一条)的的1啊?
题目:输入一个不大于10的正整数n,生成并输出杨辉三角的前n行,每个数占5列。
```c
#include<stdio.h>
main()
{int a[10][10],i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{a[i][0]=1;
a[i][i]=1;}
for(i=2;i<n;i++)
for(j=0;j<i;j++)
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("%5d",a[i][j]);
printf("\n");
}
}
```
#include <stdio.h>
#include <stdlib.h>
int main() {
int n,i,j;
scanf("%d",&n);
int a[n][n];
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j||j==0){
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<n;j++){
if(j<=i){
printf("%d ",a[i][j]);
}
}
printf("\n");
}
return 0;
}
修改内层循环的起始值,从 0 改为 1。同时,循环条件也做了相应改变,从 j < i 改为 j <= i,以保证每行最后一个数也能被计算到。打印杨辉三角时,在内层循环中将循环条件修改为 j <= i,保证每行的所有数都能被打印出来。同时,在数值前加上 %5d,使其左对齐且占据 5 个字符的宽度。
#include <stdio.h>
int main() {
int a[10][10], i, j, n;
printf("请输入需要打印杨辉三角的行数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
a[i][0] = 1;
a[i][i] = 1;
}
for (i = 2; i < n; i++) {
for (j = 1; j < i; j++) {
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("%5d", a[i][j]);
}
printf("\n");
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:杨辉三角,是二项式系数在三角形中的一种几何排列,初中的时候我们学过它的每一个数都是上一行两个数之和,如图
答案:
在杨辉三角中,最右边的1实际上是从下一行的第二个数组成的,所以我们需要在输出每行末尾多输出一个1即可。
具体的代码实现如下:
for (int i = 0; i < n; i++) { int c = 1;//初始化每行的第一个数 for (int j = 0; j <= i; j++) { printf("%d ", c); c = c * (i - j) / (j + 1);//计算下一个数 } printf("1");//多输出一个1 printf("\n");//换行 }
完整的代码如下:
int main() { int n; printf("请输入要输出的行数: "); scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int c = 1;//初始化每行的第一个数
for (int j = 0; j <= i; j++)
{
printf("%d ", c);
c = c * (i - j) / (j + 1);//计算下一个数
}
printf("1");//多输出一个1
printf("\n");//换行
}
return 0;
}