|
发表于 2004-9-23 22:46:02
|
显示全部楼层
<>我有幸参加了 2004年的全国数模竞赛。我们组做了a题,我们的程序为:</P><>clc;
clear;
pa=input('请输入大超市的商圈(如:300)按回车:');
pb=input('请输入小超市的商圈(如:200)按回车:');
p1=input('请输入大超市的接待量(如:0.5)按回车:');
p2=input('请输入小超市的接待量(如:0.25)按回车:');
d=input('请输入一个商区的面积(如:40000)按回车:');
price1=input('请输入大超市的花费(如:2(万))按回车:');
price2=input('请输入大超市的花费(如:1.2(万))按回车:');</P><>jiazhi=ones(20,5)*inf;</P><P>a=[8.93 5.31 5.77 6.23 6.69 13.07 6.69 6.23 5.77 5.31 4.33 3.67 5.35 3.67 5.35 8.65 3 3.35 3 6.65];
for i=1:length(a)
if(i<=10)
fprintf(' 商区A%d内不同类型MS的个数如下:',i);
end
if(i>10&i<=16)
fprintf(' 商区B%d内不同类型MS的个数如下:',i-10);
end
if(i>16&i<=20)
fprintf(' 商区C%d内不同类型MS的个数如下:',i-16);
end
f=[price1;price2];
A=[pa pb;-p1 -p2];
b=[d;-a(i)];
lb=[0,1];
[x,fval]=linprog(f,A,b,[],[],lb);
m(i)=x(1,1)
n(i)=x(2,1)
jiazhi(i,1)=fval;
k1=abs(m(i)-round(m(i)));
k2=abs(n(i)-round(n(i)));
if ((k1<1.0e-3)&(k2<1.0e-3))
m(i)
n(i)
else a11=fix(m(i));
a12=fix(m(i))+1;
b11=fix(n(i));
b12=fix(n(i))+1;
if (((pa*a11+pb*b11)<=d)&((p1*a11+p2*b11)>=a(i)))
jiazhi(i,2)=price1*a11+price2*b11;
end
if (((pa*a11+pb*b12)<=d)&((p1*a11+p2*b12)>=a(i)))
jiazhi(i,3)=price1*a11+price2*b12;
end
if (((pa*a12+pb*b11)<=d)&((p1*a12+p2*b11)>=a(i)))
jiazhi(i,4)=price1*a12+price2*b11;
end
if (((pa*a12+pb*b12)<=d)&((p1*a12+p2*b12)>=a(i)))
jiazhi(i,5)=price1*a12+price2*b12;
end
jiazhi
z=min(jiazhi(i,2:5))
for j=2:5
if(jiazhi(i,j)==z)
j
end
end
if j==2
fprintf(' 大超市的个数为:%d', a11);
fprintf(' 小超市的个数为:%d',b11);
elseif j==3
fprintf(' 大超市的个数为:%d',a11);
fprintf(' 小超市的个数为:%d',b12);
elseif j==4
fprintf(' 大超市的个数为:%d',a12);
fprintf(' 小超市的个数为:%d',b11);
elseif j==5
fprintf(' 大超市的个数为:%d',a12);
fprintf(' 小超市的个数为:%d',b12);
end
end
end </P> |
|