C語言列印楊輝三角的多種方法
阿新 • • 發佈:2019-01-25
3.在螢幕上列印楊輝三角。
1
1 1
1 2 1
1 3 3 1
解法一:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int i,j,n = 0; //首先定義二維陣列計數符號i,j 還有楊輝三角行數的初始化 int a[100][100] = {0}; //二維陣列大小可自定,但切記不可使其超過整形陣列的大小 while(n < 1 || n >100) //在輸入的值不正確時自動初始化問題,重新輸入 { printf("請輸入要列印的楊輝三角行數>:"); scanf("%d",&n); } for(i = 0; i < n ; i++) { a[i][0] = 1; //每一行第一個為1,用第一個for迴圈的輸入 } for(i = 1; i < n; i++ )//第一層迴圈i決定第幾行 { for(j = 1; j <= i; j++)//第二層迴圈借用i限制每行字元數目 { a[i][j] = a[i-1][j-1]+a[i-1][j]; } } for(i = 0; i < n; i++)//一個for迴圈逐行列印叫a的二維陣列 { for(j = 0; j <= i; j++) printf("%5d",a[i][j]); printf("\n"); } return 0; }
//一般解法,淺顯易懂
解法二:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int i,j,n = 0; //首先定義二維陣列計數符號i,j 還有楊輝三角行數的初始化 int a[100][100] = {1}; //二維陣列大小可自定,但切記不可使其超過整形陣列的大小 while(n < 1 || n >100) //在輸入的值不正確時自動初始化問題,重新輸入 { printf("請輸入要列印的楊輝三角行數>:"); scanf("%d",&n); } for(i = 1; i < n; i++ )//第一層迴圈i決定第幾行 { a[i][0] = 1; for(j = 1; j <= i; j++)//第二層迴圈借用i限制每行字元數目 { a[i][j] = a[i-1][j-1]+a[i-1][j]; } } for(i = 0; i < n; i++)//一個for迴圈逐行列印叫a的二維陣列 { for(j = 0; j <= i; j++) printf("%5d",a[i][j]); printf("\n"); } return 0; } //把每一行的第一個初始化1的操作包入第一個for迴圈中,並且改動二維陣列初始化值為1
解法三:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int i,j,n = 0; //首先定義二維陣列計數符號i,j 還有楊輝三角行數的初始化 int a[100][100] = {0,1}; //只有2個初值,即a[0][0]=1,a[0][1]=2,其餘陣列元素的初值均為0 //二維陣列大小可自定,但切記不可使其超過整形陣列的大小 while(n < 1 || n >100) //在輸入的值不正確時自動初始化問題,重新輸入 { printf("請輸入要列印的楊輝三角行數>:"); scanf("%d",&n); } for(i = 1; i < n; i++ )//第一層迴圈i決定第幾行 { for(j = 1; j <= i; j++)//第二層迴圈借用i限制每行字元數目 { a[i][j] = a[i-1][j-1]+a[i-1][j]; } } for(i = 1; i < n; i++)//一個for迴圈逐行列印叫a的二維陣列 { for(j = 1; j <= i; j++) printf("%5d",a[i][j]); printf("\n"); } return 0; } //優化於方法一二,取消二維陣列中第一列賦值為1的做法,且在最後輸出時略有改動 //int a[100][100] = {0,1};此處賦值知識已單獨開設一文,請自行查詢本人部落格
解法四:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i,j,n = 0;
//首先定義二維陣列計數符號i,j 還有楊輝三角行數的初始化
int a[100][100] = {0,1};
//二維陣列大小可自定,但切記不可使其超過整形陣列的大小
while(n < 1 || n >100)
//在輸入的值不正確時自動初始化問題,重新輸入
{
printf("請輸入要列印的楊輝三角行數>:");
scanf("%d",&n);
}
for(i = 1; i < n; i++ )//第一層迴圈i決定第幾行
{
for(j = 1; j <= i; j++)//第二層迴圈借用i限制每行字元數目
{
a[i][j] = a[i-1][j-1]+a[i-1][j];
printf("%5d",a[i][j]);
}
printf("\n");
}
return 0;
}
//優化於解法三,僅將賦值輸出同時進行,且注意換行符的位置更替。
解法五:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i,j,n = 0;
//首先定義二維陣列計數符號i,j 還有楊輝三角行數的初始化
int a[100] = {1};
int b[100] = {0};
while(n < 1 || n >100)
//在輸入的值不正確時自動初始化問題,重新輸入
{
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];
}
for(j = 0; j <= i; j++)
{
a[j] = b[j];
printf("%5d",a[j]);
}
printf("\n");
}
return 0;
}
//解法五不同於前者,使用兩個一維陣列能夠較好的節省空間,方法可行,but執行方式有待我仔細酌定。
望見諒,後續更新
解法六:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i,j,n = 0;
int l,r;
//首先定義二維陣列計數符號i,j 還有楊輝三角行數的初始化
int a[100] = {0,1};
while(n < 1 || n >100)
//在輸入的值不正確時自動初始化問題,重新輸入
{
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;
l = r;
printf("%5d",a[j]);
}
printf("\n");
}
return 0;
}
//解法六使用一個一維陣列,再加兩個臨時變數進行操作
細節更新後續o_o ....