杨辉三角--我的面试题

我在上海面试时的面试题,让打印杨辉三角。杨辉三角见:http://baike.baidu.com/view/7804.htm?fr=ala0_1_1

 

首先想到的是动态规划,接着想到的是递归……后来自己很奇怪,应该首先想到递归,接着想到动态规划才对……

 

动态规划如下:

 

#define MAX 12 int main(void) { int n=MAX+1; int i,j; int num[MAX+1][MAX+1]={0}; int *startp,*endp,*curp; int cur=1; while(n>MAX) //若输入>12,则重新输入 { printf(“N=?(<=%d)”,MAX); scanf(“%d”,&n); } for(i=0;i<=n;i++) { for(j=0;j<MAX-i;++j) printf(” “); //输出空格 startp=&num[1-cur][0]; curp=&num[cur][0]; endp=curp+i; *curp++=1; while(curp<endp) { *curp=*startp+*(startp+1); ++curp,++startp; } curp=&num[cur][0]; while(curp<endp) printf(“%6d”,*curp++); puts(“”); cur=1-cur; } }

我觉得,使用while输入正确值的方法非常好,原来都没有想到过……

 

递归如下:

 

#define MAX 12 int GetNum(int ,int); int main(void) { int n=MAX+1; int i,j; while(n>MAX) //若输入>12,则重新输入 { printf(“N=?(<=%d)”,MAX); scanf(“%d”,&n); } for(i=0;i<n;++i) { for(j=0;j<MAX-i;++j) printf(” “); //输出空格 for(j=1;j<i+2;++j) printf(“%6d”,GetNum(i,j)); puts(“”); } } int GetNum(int x, int y) { int z; if((y==1)||(y==x+1)) return (1); else { z=GetNum(x-1,y-1)+GetNum(x-1,y); return z; } }

 

杨辉三角和斐波那契数列的求解非常相似,太相似了。这道面试题貌似没有多难……至少远远没有ACM难……

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/kewing/article/details/5615691
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞