穷举法用C语言怎么写?

Python012

穷举法用C语言怎么写?,第1张

共有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