方程式:5*m + 2*n + 1*k = 100
字面可知:m<=20, n<=50, k<=100
故最简单方式如下:
int fun1(){
int total = 0;
for (int m = 0; m <= 20; m++)
{
for (int n = 0; n <= 50; n++){
for (int k = 0; k <= 100; k++){
if (m * 5 + n * 2 + k * 1 == 100){
total++;printf("%d*5 + %d*2 + %d*1 = 100\n", m, n, k);break;
}
}
}
}printf("total is %d", total);
return total;
}
上述循环次数过多,再次分析可知5*m + 1*k和为偶数,即可知:
m=0 k=100 98 96 ... 0
m=1 k=95 93 91 ... 1
...
m=19 k=5 3 1
m=20 k=0
总结规律:
int fun2()
{
int total;
for (int i = 0; i< 100; i += 5)
{
total += (i +2) / 2;
}
return total;
}