最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

实现杨辉三角

来源:动视网 责编:小采 时间:2020-11-09 16:12:41
文档

实现杨辉三角

实现杨辉三角:用存储过程和临时表来写,主要是想最后一个select出来结果,而且排成想要的三角形形状。 由于BIGINT数据的限制,最多可以显示67层。 结果 id ----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
推荐度:
导读实现杨辉三角:用存储过程和临时表来写,主要是想最后一个select出来结果,而且排成想要的三角形形状。 由于BIGINT数据的限制,最多可以显示67层。 结果 id ----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----


用存储过程和临时表来写,主要是想最后一个select出来结果,而且排成想要的三角形形状。 由于BIGINT数据的限制,最多可以显示67层。 结果 id ----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 1 1 2 1 1 3 1 2 1 4

用存储过程和临时表来写,主要是想最后一个select出来结果,而且排成想要的三角形形状。 由于BIGINT数据的限制,最多可以显示67层。
结果
id
----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
1 1
2 1 1
3 1 2 1
4 1 3 3 1
5 1 4 6 4 1
6 1 5 10 10 5 1
7 1 6 15 20 15 6 1
8 1 7 21 35 35 21 7 1 <无> $velocityCount-->
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<=@c
begin
 --为了实现动态层,只好动态修改临时表结构
 set @sql='alter table # add a'+cast(50000+@i-1 as varchar(10))+' bigint,a'+cast(50000-@i+1 as varchar(10))+' bigint' 
 exec (@sql)
 set @sql1=''
 set @sql2=''
 set @j=@i-1
 while @j>=0
 begin
 --这里判断有点乱
 if @j=0
 set @sql1=@sql1+',a'+cast(50000-@j as varchar(10))
 else
 set @sql1=@sql1+',a'+cast(50000-@j as varchar(10))+',a'+cast(50000+@j as varchar(10))
 if @j=@i-1
 set @sql2=@sql2+',1,1'
 else
 if @j=0
 set @sql2=@sql2+',a'+cast(50000-@j-1 as varchar(10))+'+a'+cast(50000-@j+1 as varchar(10))
 else
 set @sql2=@sql2+',a'+cast(50000-@j-1 as varchar(10))+'+a'+cast(50000-@j+1 as varchar(10))+',a'+cast(50000+@j-1 as varchar(10))+'+a'+cast(50000+@j+1 as varchar(10))
 
 set @j=@j-2
 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 #('+@sql1+') select '+@sql2+' from # where id='+@sql)
 set @i=@i+1
end

set @i=50000-@c+1
set @j=50000+@c-1
set @sql=''
--去最长的数据,就是为了节省显示空间
select @sql1=CAST(len(cast(max(a50000) as varchar(50)))+1 AS VARCHAR(10)) from #
while @i<=@j
begin
 set @sql=@sql+',isnull(cast(a'+cast(@i as varchar(10))+' as varchar('+@sql1+')),'''')'
 set @i=@i+1
end
exec ('select id'+@sql+' from # order by id')
drop table #

GO
 
--调用
exec #pr_YangHui 8

文档

实现杨辉三角

实现杨辉三角:用存储过程和临时表来写,主要是想最后一个select出来结果,而且排成想要的三角形形状。 由于BIGINT数据的限制,最多可以显示67层。 结果 id ----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
推荐度:
标签: 一个 过程 最后
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top