帮忙看下,结果和预想不一样
#include<stdio.h>
int main()
{ int m,n,k,b[15][15];
b[0][1]=1;
for(m=0;m<15;m++)
{for(n=0;n<=m;n++)
{b[m][n]=b[m-1][n-1]+b[m-1][n];
printf("%-5d",b[m][n]);}
printf("\n");
getch();
}
}
[解决办法]
m,n都是从0开始的,但是第一次循环b[m-1][n-1]是b[-1][-1],我想这不是你想要的,另外这种题目自己单步一下或看一下printf的结果就什么都清楚了
[解决办法]
[code=C/C++][/code]
#include<stdio.h>
int main()
{
int m,n,b[15][15]={0};//数组元素初始化为0
b[0][0]=1;//这里是给数组第一个元素赋值
for(m=1;m<15;m++)//m和n从1开始
{
for(n=1;n<=m;n++)
{
b[m][n]=b[m-1][n-1]+b[m-1][n];
printf("%-5d",b[m][n]);
}
printf("\n");
}
}
[解决办法]
次幂展开式
第m行第n列的系数为:f(m,n) = f(m - 1, n - 1) + f(m - 1, n);
[code=C]
#include <stdio.h>
int getcol(int row, int col)
{
// 第一行,两个系数均为 1,直接返回 1
if(1 == row) return 1;
// 第一列或者最后一列,系数均为 1,直接返回 1
if((1 == col) || ((row + 1)== col)) return 1;
return getcol(row - 1, col - 1) + getcol(row - 1, col);
}
int main(void)
{
printf("Please input rows: ");
int rows = 1;
scanf("%d", &rows);
if(rows < 1) rows = 1;
int i;
for(i = 0; i < rows; i ++)
{
int j;
// i,j 的值均从 0 开始,因此第一行为 i + 1,第一列为 j + 1
// 第 (i + 1) 行共有 (i + 1) + 1 列
for(j = 0; j < (i + 1) + 1; j ++)
{
printf("%d ", getcol(i + 1, j + 1));
}
printf("\n");
}
fflush(stdin);
getchar();
return 0;
}
[/code]