一、百钱买百鸡问题
现有100钱,公鸡5文钱一只,母鸡3文钱一只,小鸡一文钱3只
要求:公鸡、母鸡,小鸡都要有,把100文钱花完,
买的鸡的数量正好是100。
问:一共能买多少只公鸡,多少只母鸡,多少只小鸡?
declare @xiaoji int;
declare @gongji int;
declare @muji int;
set @xiaoji=0;
set @gongji=0;
set @muji=0;
while @gongji<20
begin
while @muji<33
begin
set @xiaoji=100-@gongji-@muji
if (@gongji*15+@muji*9+@xiaoji)=300
begin
print 'xiaoji:'+cast(@xiaoji as varchar)+' gongji:'+cast(@gongji as varchar)+' muji:'+cast(@muji as varchar)
end
set @muji=@muji+1
end
set @muji=1
set @gongji=@gongji+1
end
二、排序
要求:自定义存储过程
create procedure test @str varchar(100)
as
begin
declare @i int,@tmp varchar(100),@a int,@b varchar(100),@c int,@d int,@e varchar(100)
set @i=charindex(',',@str) --第一个逗号位置
set @tmp=substring(@str,0,@i) --截取逗号前面的字符
set @a=len(replace(@str,',','--'))-len(@str)+1 --统计总共有多少个数
--开始可以新建一个表
set @b=replace(@str,@tmp+',','')
--set @b=substring(@b,@i+1,len(@b)-len(@tmp))
--print @b
set @c=1
while @a>0
begin
set @e= '第'+cast(@c as varchar)+'个数'
set @d= cast(@tmp as int)
INSERT INTO [dbo].[paixu]
([列名]
,[数值])
VALUES
(@e,@d)
set @i=charindex(',',@b)
if @i=0
begin
set @tmp=@b
end
else
begin
set @tmp=substring(@b,0,@i) --截取逗号前面的字符
end
set @b=substring(@b,@i+1,len(@b)-len(@tmp))
set @c=@c+1
set @a=@a-1
end
select * from [tete].[dbo].[paixu] order by [数值];
delete from [tete].[dbo].[paixu]
end
test @str='34,456,23,88,62'
有bug。。如果有重复的数,就会出现问题。。。就这样吧。。之后有时间再看看哪里出了问题,再把这行字删了。。
问题:代码太长,应该是不能用orderby,难点在于在sql中创建出类似数组的结构,再用常用方法,类似冒泡进行排序。。。之后再改吧。。