您的位置:首页 > 职场人生

杨辉三角--我的面试题

2010-05-22 09:16 183 查看
我在上海面试时的面试题,让打印杨辉三角。杨辉三角见: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难……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: