本题要求按照规定格式打印前N行杨辉三角。
输入格式:
输入在一行中给出N(1≤N≤10)。
输出格式:
以正三角形的格式输出前N行杨辉三角。每个数字占固定4位。
输入样例:7
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
首先想一下这题得应用什么知识,应该是二维数组,利用循环遍历来打印所需要的杨辉三角。
找到杨辉三角的特点,前把杨辉三角外层先定义好:
int a[11][11];
int n;
scanf("%d",&n);
a[0][0] = 1;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(j == 0){
a[i][j] = 1;
}
if(i == j){
a[i][j] = 1;
}
}
}
然后利用杨辉三角的性质,上一行相邻的两个数之和等于下面的数:
然后最重要的是空格的实现,我定义了一个temp;来打印每一行开头的空格,其次每个数的字符占4格。
for(int i = 2; i < n; i++){
for(int j = 1; j < i; j++){
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
int temp = n -1;
for(int i = 0; i < n; i++){
for(int j = 0; j <= i; j++){
if(j == 0){
while(temp!=0){
printf(" ");
temp--;
}
}
printf("%4d",a[i][j]);
temp = n - 2 - j;
}
printf("\n");
}
最后完整的代码是:
#include<stdio.h>
int main (){
int a[11][11];
int n;
scanf("%d",&n);
a[0][0] = 1;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(j == 0){
a[i][j] = 1;
}
if(i == j){
a[i][j] = 1;
}
}
}
for(int i = 2; i < n; i++){
for(int j = 1; j < i; j++){
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
int temp = n -1;
for(int i = 0; i < n; i++){
for(int j = 0; j <= i; j++){
if(j == 0){
while(temp!=0){
printf(" ");
temp--;
}
}
printf("%4d",a[i][j]);
temp = n - 2 - j;
}
printf("\n");
}
return 0;
}