declare @x int,@a int,@b int,@c int,@ma int,@mb int,@mc int set @x=0 set @a=0 set @b=0 set @c=0 while @c<100 begin while @b<100 begin while @a<100 begin if (@a+3*@b+8*@c)>@x begin set @x=@a+3*@b+8*@c set @ma=@a set @mc=@c set @mb=@b end set @a=@a+1 end set @b=@b+1 set @a=0 end set @c=@c+1 set @b=0 set @a=0 end print @ma print @mb print @mc print @x
上面的漏了条件 这个正确!!!!!!!!!!!!!!!!!!!!!declare @x int,@a int,@b int,@c int,@ma int,@mb int,@mc int set @x=0 set @a=0 set @b=0 set @c=0 while @c<100 begin while @b<100 begin while @a<100 begin if (@a+3*@b+8*@c)>@x begin set @x=@a+3*@b+8*@c set @ma=@a set @mc=@c set @mb=@b end set @a=@a+1 end set @b=@b+1 set @a=0 end set @c=@c+1 set @b=0 set @a=0 end print @ma print @mb print @mc print @x
上面的漏了条件 这个正确!!!!!!!!!!!!!!!!!!!!!declare @x int,@a int,@b int,@c int,@ma int,@mb int,@mc int select @x=0,@a=0,@b=0,@c=0 while @c<=100 begin while @b<=100 begin while @a<=100 begin if (@a+3*@b+8*@c)>@x and (@a+@b+@c)<=100 begin select @x=@a+3*@b+8*@c,@ma=@a,@mc=@c,@mb=@b end set @a=@a+1 end select @b=@b+1,@a=0 end select @c=@c+1,@b=0,@a=0 end print @ma print @mb print @mc print @x
--创建测试数据 SELECT TOP 100 IDENTITY(int, 1,1) AS a INTO dbo.# FROM syscolumns--得到结果 SELECT TOP 10 a.a AS a,b.a AS b,c.a AS c, a.a+3*b.a+8*c.a FROM # a, # b, # c WHERE a.a+b.a+c.a<=100 ORDER BY a.a+3*b.a+8*c.a DESC a b c ----------- ----------- ----------- ----------- 1 1 98 788 1 2 97 783 2 1 97 781 1 1 97 780 1 3 96 778 2 2 96 776 1 2 96 775 3 1 96 774 2 1 96 773 1 4 95 773(10 row(s) affected)
a*x1+b*x2+c*x3=<100,求X=x1+3*x2+8*x3的最大值!,a>=0 ,b>=0,c>=0
如果变成多元怎么求最大值
a*x1+b*x2+c*x3.....=<100,求X=x1+3*x2+8*x3.....
求一算法
a*x1+b*x2+c*x3=<100,求X=x1+3*x2+8*x3的最大值!,a>=0 ,b>=0,c>=0
如果变成多元怎么求最大值
a*x1+b*x2+c*x3.....=<100,求X=x1+3*x2+8*x3.....
求一算法
-----------------------------------------------------
那就是最大值:100
x1=100 其它为0
set @x=0
set @a=0
set @b=0
set @c=0
while @c<100
begin
while @b<100
begin
while @a<100
begin
if (@a+3*@b+8*@c)>@x
begin
set @x=@a+3*@b+8*@c
set @ma=@a
set @mc=@c
set @mb=@b
end
set @a=@a+1
end
set @b=@b+1
set @a=0
end
set @c=@c+1
set @b=0
set @a=0
end
print @ma
print @mb
print @mc
print @x
set @x=0
set @a=0
set @b=0
set @c=0
while @c<100
begin
while @b<100
begin
while @a<100
begin
if (@a+3*@b+8*@c)>@x
begin
set @x=@a+3*@b+8*@c
set @ma=@a
set @mc=@c
set @mb=@b
end
set @a=@a+1
end
set @b=@b+1
set @a=0
end
set @c=@c+1
set @b=0
set @a=0
end
print @ma
print @mb
print @mc
print @x
select @x=0,@a=0,@b=0,@c=0
while @c<=100
begin
while @b<=100
begin
while @a<=100
begin
if (@a+3*@b+8*@c)>@x and (@a+@b+@c)<=100
begin
select @x=@a+3*@b+8*@c,@ma=@a,@mc=@c,@mb=@b
end
set @a=@a+1
end
select @b=@b+1,@a=0
end
select @c=@c+1,@b=0,@a=0
end
print @ma
print @mb
print @mc
print @x
SELECT TOP 100 IDENTITY(int, 1,1) AS a
INTO dbo.#
FROM syscolumns--得到结果
SELECT TOP 10 a.a AS a,b.a AS b,c.a AS c, a.a+3*b.a+8*c.a
FROM # a, # b, # c
WHERE a.a+b.a+c.a<=100
ORDER BY a.a+3*b.a+8*c.a DESC a b c
----------- ----------- ----------- -----------
1 1 98 788
1 2 97 783
2 1 97 781
1 1 97 780
1 3 96 778
2 2 96 776
1 2 96 775
3 1 96 774
2 1 96 773
1 4 95 773(10 row(s) affected)