一道题,测试论坛水平
甲 乙 丙 丁 A区 x1 y1 z1 k1
B区 x2 y2 z2 k2
C区 x3 y3 z3 k3
甲区用水: 30 <= x1 + x2 + x3 <= 80 ;
乙区用水: 60 <= y1 + y2 + y3 <= 130 ;
丙区用水: 20 <= z1 + z2 + z3 <= 50 ;
丁区用水: 20 <= k1 + k2 + k3 <= 50 ;
A区的供水量: 0 <= x1 + y1 + z1 + k1 <= 100 ;
B区的供水量: 0 <= x2 + y2 + z2 + k2 <=120 ;
C区的供水量: 0 <= x3 + y3 + z3 + k3 <=100 ;
总收入:(x1 + x2 + x3 + y1 + y2 + y3 + z1 + z2 + z3 + k1 + k2 + k3)*(900 -500);
管理费:(160*x1 + 140*x2 + 190*x3 + 130*y1 + 130*y2 + 200*y3 + 220*z1 + 190*z2 + 180*z3 + 170*k1 + 160*k2 + 380*k3)
求: (总收入 – 管理费)的最大值,并记录取得之大值时对应的x1 、 x2 、 x3 、 y1 、 y2 、 y3 、 z1 、 z2 、 z3 、 k1、 k2 、 k3 ;
#include <stdio.h>
#define intrest( x1 + x2 + x3 + y1 + y2 + y3 + z1 + z2 + z3 + k1 + k2 + k3) //这个数据我还没改,应该是总收入-管理费
#define jiause (x1+x2+x3)
#define yiuse (y1+y2+y3)
#define binguse (z1+z2+z3)
#define dinguse (k1+k2+k3)
#define asupply (x1+y1+z1+k1)
#define bsupply (x2+y2+z2+k2)
#define csupply (x3+y3+z3+k3)
void main()
{
int x1,x2,x3,y1,y2,y3,z1,z2,z3,k1,k2,k3,max,count;
max=0;
for(x1=0;0<asupply<100;x1++)
for(y1=0;0<asupply<100;y1++)
for(z1=0;0<asupply<100;z1++)
for(k1=0;0<asupply<100;k1++)
for(x2=0;0<bsupply<120;x2++)
for(y2=0;0<bsupply<120;y2++)
for(z2=0;0<bsupply<120;z2++)
for(k2=0;0<bsupply<120;k2++)
for(x3=0;0<csupply<100;x3++)
for(y3=0;0<csupply<100;y3++)
for(z3=0;0<csupply<100;z3++)
for(k3=0;0<csupply<100;k3++)
{
if(30<=jiause<=80&&60<=yiuse<=130&&20<=binguse<=50&&20<=dinguse<=50)
{
if(intrest>max)
{
max=intrest;
count++;
printf("%d,%d\n",max,count);
}
}
}
getch();
}
求改错,求解法,高手现身吧~
程序貌似进入死循环了
也可能溢出了吧
[ 本帖最后由 t1melost 于 2011-6-2 22:24 编辑 ]