等腰杨辉三角
我在网上找到了等腰杨辉三角的代码,不过不能理解。希望各位朋友鼎立相助;帮我解释一下。还有杨辉三角的解题思路。可以给我讲一讲吗??(本人是菜鸟,有很多的题不会做。本人希望在解题中知道其中的原理,希望各位大大能讲细一下其中的原理。)在这里先谢谢了 main()
{
int i,j;
int a[5][5];
printf("\n\n\n");
for(i=0;i<10;i++)
for(j=0;j<=i;j++)
{
if(j==0||j==i)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<5;i++)
{
for(j=0;j<=5-i;j++)
printf("%2c",' ');
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
getch();
}
----------------解决方案--------------------------------------------------------
你知道什么是杨辉三角不
----------------解决方案--------------------------------------------------------
不太知道,只知道是
1
1 1
1 2 1
1 3 3 1
用数学公式(a+b)的平方展开
----------------解决方案--------------------------------------------------------
我只能告诉你,对数组的操作,其实就是对下标的操作,你可以把杨辉三角画出来!
然后,在底下对应写出下标,便于理解!
然后,观察规律!下标是从0到n-1这个很容易误导人!
----------------解决方案--------------------------------------------------------
我知道是对下标的操作。但是不知道怎么画出图形(特别是等腰的。编译)。希望可以给我指点一下。怎么用FOR语句画图形。还有怎么确定等腰三角的第一个1的位置呀??
----------------解决方案--------------------------------------------------------
你可以这么想,假设一个数字占4个字的位置。那么设最底层有十个数字,就是40,第一层应该在中间,也就是20,然后每次递减4个具体可以看我的代码:
程序代码:
#include <stdio.h>
#define N 10
void PrintYH() {
int i,j,arr[2][N]={0};
for (i=0;i<N;i++) {
for (j=0;j<=i;j++) {
if (i==0 || j==0) {
arr[i%2][j]=1;
printf("%*d",(N-i)*2,arr[i%2][j]);
}
else {
arr[i%2][j]=arr[!(i%2)][j-1]+arr[!(i%2)][j];
printf("%4d",arr[i%2][j]);
}
}
printf("\n");
}
}
int main() {
PrintYH();
getchar();
}
顺便说一下,代码使用了两“层”数组,在空间和时间上取得了最佳平衡。#define N 10
void PrintYH() {
int i,j,arr[2][N]={0};
for (i=0;i<N;i++) {
for (j=0;j<=i;j++) {
if (i==0 || j==0) {
arr[i%2][j]=1;
printf("%*d",(N-i)*2,arr[i%2][j]);
}
else {
arr[i%2][j]=arr[!(i%2)][j-1]+arr[!(i%2)][j];
printf("%4d",arr[i%2][j]);
}
}
printf("\n");
}
}
int main() {
PrintYH();
getchar();
}
[[italic] 本帖最后由 StarWing83 于 2008-1-9 13:05 编辑 [/italic]]
----------------解决方案--------------------------------------------------------