加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

实现杨辉三角

发布时间:2020-12-11 23:15:33 所属栏目:MySql教程 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 CREATE proc #pr_YangHui@c intas /* SQL实现显示杨辉三角 */ /* 版本: 1.0 */ /* 作者: Haiwer */ /* 版权所有 */ /* 2006.05.10 */set nocount onif

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

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]+')),'''')'
 set @[email?protected]+1
end
exec ('select id'[email?protected]+' from # order by id')
drop table #

GO
 
--调用
exec #pr_YangHui 8

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读