他给的题目是这样的,有三个随机的参数,两个是长和宽一个是个数,例:如果传的是100 100 10,就是长和宽是100,个数是10个(假设是十个正方形),要取到最后这个10,这个10的两位数相乘相近的乘积,比如25=10就可以,110=10这样的就不行,一定要是相近的两个数,最后再把这10个分两份排列,一行五个,再求出这个10个正方形总的一个周长,要求,不管传入的三个参数是什么,都必须要保证长和宽+起来的总数,必须合理分配到每个的个数。
CREATE PROCEDURE get_total_perimeter
@length INT,
@width INT,
@num INT
AS
BEGIN
DECLARE @num1 INT, @num2 INT;
DECLARE @total_perimeter INT;
-- 计算num1和num2
SET @num1 = CEILING(SQRT(@num));
SET @num2 = FLOOR(SQRT(@num));
-- 计算总周长
SET @total_perimeter = (@length * @num1 + @width * @num2) * 2;
SELECT @total_perimeter;
END
100 100 10 计算的结果应该是1816,这是公式:select ((100 +4)+(100+4)) *2+ (10 *( (20 +50)*2 ) )
看你这个提问好几次了,没明白你想干嘛
你第三个参数,想分成两个最接近正数,且两数相乘等于第三个参数?
declare @length int,@width int,@num int
select @length = 100,@width = 100,@num = 98
declare @n1 int,@n2 int
select number,@num / number
from master..spt_values
where type='p' and number between 1 and @num and convert(float,@num) / number = @num / number
order by abs(number - @num / number)
比如,第三个参数是98,那么就分解成 7 * 14 ?