第一次穷举法(我很菜):
代码跟第二次的差不多,就是第一次没有这些if 跟break:
if(i_p1*p1+i_p2*p2>f2)break; if(i_p1*p1+i_p2*p2+i_p5*p5>f2)break;
省略后面雷同。。。
计算结果所花时间为180s。
下面是第二次的:(计算结果所花时间18s)
#include请各位大大提点一下,有没有更好的办法,我每次只能想到穷举法。。。囧#define p1 1#define p2 2#define p5 5#define p10 10#define p20 20#define p50 50#define f1 100#define f2 200int main(){ int count=0,i_p1,i_p2,i_p5,i_p10,i_p20,i_p50,i_f1,i_f2; for(i_p1=0; i_p1<=f2; i_p1++) { for(i_p2=0; i_p2<=f1; i_p2++) { if(i_p1*p1+i_p2*p2>f2)break; for(i_p5=0; i_p5<=40; i_p5++) { if(i_p1*p1+i_p2*p2+i_p5*p5>f2)break; for(i_p10=0; i_p10<=p20; i_p10++) { if(i_p1*p1+i_p2*p2+i_p5*p5+i_p10*p10>f2)break; for(i_p20=0; i_p20<=p10; i_p20++) { if(i_p1*p1+i_p2*p2+i_p5*p5+i_p10*p10+i_p20*p20>f2)break; for(i_p50=0; i_p50<=4; i_p50++) { if(i_p1*p1+i_p2*p2+i_p5*p5+i_p10*p10+i_p20*p20+i_p50*p50>f2)break; for(i_f1=0; i_f1<=2; i_f1++) { if(i_p1*p1+i_p2*p2+i_p5*p5+i_p10*p10+i_p20*p20+i_p50*p50+i_f1*f1>f2)break; for(i_f2=0; i_f2<=1; i_f2++) { if(i_p1*p1+i_p2*p2+i_p5*p5+i_p10*p10+i_p20*p20+i_p50*p50+i_f1*f1+i_f2*f2==f2) { count++; printf("%d\t1:%d2:%d5:%d10:%d20:%d50:%df1:%df2:%d\n",count,i_p1,i_p2,i_p5,i_p10,i_p20,i_p50,i_f1,i_f2 ); } } } } } } } } } printf("%d\n",count); return 0;}