用sql server 存储过程实现百元买百鸡
程序员文章站
2022-05-29 09:57:38
...
滴滴!今天接到了一个新任务,在sql server 里面用存储过程写一个百元买百鸡的代码。
First 百元买百鸡是啥?
今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?
通俗点来说呢,就是:
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
Second 稍作分析
根据题干,我们可以设,公鸡买a只,母鸡买b只,小鸡买c只。
那么得到:
a+b+c=100
5a+3b+c/3=100
这里有三个未知量·,只有两个式子,说明答案不止有种情况。
接下来通过代码具体分析
Third 上代码
先来看主要的算法:
declare @a int; //声明三个变量
declare @b int;
declare @c int;
set @a=0 //变量初始化
set @b=0
set @c=0
while @a<=20 --公鸡,因为一只公鸡5文,则公鸡数目最多20只
begin
while @b<=(100-5*@a)/3 --母鸡,100文钱减去公鸡的只数与公鸡的单价,就是剩余的钱,在除以3,就是所能购买母鸡只数的最大值
begin
set @c =aaa@qq.com@b --小鸡,小鸡的只数等于100减去公鸡数和母鸡数
if (@a*aaa@qq.com*aaa@qq.com/3=100) and (@c%3!=0)
begin
print '公鸡的数量为'+ convert(nvarchar(10),@a)
print '母鸡的数量为'+ convert(nvarchar(10),@b)
print '小鸡的数量为'+ convert(nvarchar(10),@c)
end
set @b=@b+1
end
set @b=0
set @a=@a+1
end
注意:
1、print '公鸡的数量为'+ convert(nvarchar(10),@a)
中convert(nvarchar(10),@a)
的作用是将数值型数据(也可以是其他数据类型)转换成最多10个字符的字符串,以便和前面的字符串相连。因为只能字符串和字符串想拼接
2、以上就可以实现对答案的输出,可是这样输出来,确实不好看,我们可以建个表,让他输入在表里面
完善版
create table buy_chicken(
male_chicken int primary key ,
female_chicken int,
little_chicken int,
) //创建表
declare @a int;
declare @b int;
declare @c int;
set @a=0
set @b=0
set @c=0
while @a<=20 --公鸡
begin
while @b<=(100-5*@a)/3 --母鸡
begin
set @c =aaa@qq.com@b --小鸡
if (@a*aaa@qq.com*aaa@qq.com/3=100) and (@c%3!=0)
begin
insert into buy_chicken(male_chicken,female_chicken,little_chicken)values(@a,@b,@c)//插入语句
end
set @b=@b+1
end
set @b=0
set @a=@a+1
end
运行结果是这样子滴!