当前位置: 代码迷 >> Sql Server >> 求杨辉三角解决方案
  详细解决方案

求杨辉三角解决方案

热度:107   发布时间:2016-04-27 19:43:40.0
求杨辉三角
给出任意值
输出一个杨辉三角!!!

------解决方案--------------------
不会,帮顶
------解决方案--------------------
--C语言的

在屏幕上显示杨辉三角形

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
......................................


*问题分析与算法设计
杨辉三角形中的数,正是(x+y)的N次方幂展开式各项的系数。本题作为程序设计中具有代表性的题目,求解的方法很多,这里仅给出一种。
从杨辉三角形的特点出发,可以总结出:
1)第N行有N+1个值(设起始行为第0行)
2)对于第N行的第J个值:(N> =2)
当J=1或J=N+1时:其值为1
J!=1且J!=N+1时:其值为第N-1行的第J-1个值与第N-1行第J个值
之和
将这些特点提炼成数学公式可表示为:
1 x=1或x=N+1
c(x,y)=
c(x-1,y-1)+c(x-1,y) 其它

本程序应是根据以上递归的数学表达式编制的。
*程序说明与注释
#include <stdio.h>
int main()
{
int i,j,n=13;
printf( "N= ");
while(n> 12)
scanf( "%d ",&n); /*控制输入正确的值以保证屏幕显示的图形正确*/
for(i=0;i <=n;i++) /*控制输出N行*/
{
for(j-0;j <24-2*i;j++) printf( " "); /*控制输出第i行前面的空格*/
for(j=1;j <i+2;j++) printf( "%4d ",c(i,j)); /*输出第i行的第j个值*/
printf( "\n ");
}
}

void int c(int x,int y) /*求杨辉三角形中第x行第y列的值*/
{
int z;
if((y==1)||(y==x+1)) return 1; /*若为x行的第1或第x+1列,则输出1*/
z=c(x-1,y-1)+c(x-1,y); /*否则,其值为前一行中第y-1列与第y列值之和*/
return z;
}



------解决方案--------------------
给出的任意值 !!
需用sql写
------解决方案--------------------
CREATE proc pr_YangHui
@c int
as
/* SQL实现显示杨辉三角 */
/* 版本: 1.0 */
/* 作者: Haiwer */
/* 版权所有 */
/* 2006.05.10 */
set nocount on
if @c <2 return --两层以下就不排了
declare @i int
declare @j int
declare @sql varchar(8000)
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
create table #(id int IDENTITY(1,1),a50000 bigint)
insert #(a50000) values (1) --第一层
set @i=2
while @i <[email protected]
begin
--为了实现动态层,只好动态修改临时表结构
set @sql= 'alter table # add a '+cast([email protected] as varchar(10))+ ' bigint,a '+cast([email protected]+1 as varchar(10))+ ' bigint '
exec (@sql)
set @sql1= ' '
set @sql2= ' '
set @[email protected]
while @j> =0
begin
--这里判断有点乱
if @j=0
set @[email protected]+ ',a '+cast([email protected] as varchar(10))
else
set @[email protected]+ ',a '+cast([email protected] as varchar(10))+ ',a '+cast([email protected] as varchar(10))
if @[email protected]
set @[email protected]+ ',1,1 '
else
if @j=0
set @[email protected]+ ',a '+cast([email protected] as varchar(10))+ '+a '+cast([email protected]+1 as varchar(10))
else
set @[email protected]+ ',a '+cast([email protected] as varchar(10))+ '+a '+cast([email protected]+1 as varchar(10))+ ',a '+cast([email protected] as varchar(10))+ '+a '+cast([email protected]+1 as varchar(10))

set @[email protected]
end
--去掉多余的逗号
set @sql1=right(@sql1,len(@sql1)-1)
set @sql2=right(@sql2,len(@sql2)-1)
set @sql=cast(@i-1 as varchar(10))
exec( 'insert #( '[email protected]+ ') select '[email protected]+ ' from # where id= '[email protected])
set @[email protected]+1
end

set @[email protected]+1
set @[email protected]
set @sql= ' '
--去最长的数据,就是为了节省显示空间
select @sql1=CAST(len(cast(max(a50000) as varchar(50)))+1 AS VARCHAR(10)) from #
while @i <[email protected]
begin
set @[email protected]+ ',isnull(cast(a '+cast(@i as varchar(10))+ ' as varchar( '[email protected]+ ')), ' ' ' ') '
  相关解决方案