共有156种方案:
#include<stdio.h>
int main()
{ int a,b,c,n=0
for(a=1a<27a++)
for(b=a+1b<(800-30*a)/20b++)
{ c=(800-30*a-20*b)/10
if(a*30+b*20+c*10==800 &&b<c)
{ n++
printf("%2d %2d %2d\t",a,b,c)
}
}
printf("\nTotal=%d\n",n)
return 0
}
为啥它们范围会这样取,为啥x会从1-14,这是需要仔细推算的。因为本题的计算量很小,有时就图自己省力(少算一点)让计算机多算一点。
因为x至少是1,而y>x,z>y,为简单起见,而x、y、z的单价分别为a、b、c,所以,ax+by+cz=800
而ax+by+cz>ax+bx+cx
所以,800>(a+b+c)x
x<800/(30+20+10),即x<=13(取整数)
同样的道理,y最小是2,800=30+20y+10z>30+20y+10y,y最大=770/30=25