假设有这样一个需求:
1、1000块钱,买100只鸡。
2、公鸡50元/只,母鸡30元/只,小鸡10元/3只。有多少种买法?
来看一下码农行为:
int count = 0;//买法
int i = 0;//循环次数
for (int x = 0; x < 100; x++){//x表示公鸡的数量
for (int y = 0; y < 100; y++){//y表示母鸡的数量
for (int z = 0; z < 100; z++){//z表示小鸡的数量
if (50 * x + 30 * y + z * 10 / 3 == 1000&&x+y+z==100){
count++;
cout << "公鸡" << x << "只,母鸡" << y << "只,小鸡" << z << "只\n";
}
i++;
}
}
}
就这么一个简单的需求,循环了一百万次!!!
很明显,可以优化一下。一千块钱最多只能买20只公鸡或者33只母鸡,而且小鸡的数量不用考虑。
for (int x = 0; x <= 20; x++){
for (int y = 0; y <= 33; y++){
if (50 * x + 30 * y + (100-x-y) * 10 / 3 == 1000){
count++;
cout << "公鸡" << x << "只,母鸡" << y << "只,小鸡" << (100-x-y) << "只\n";
}
i++;
}
}
714次!明显比之前的码农行为要好太多了。但是到这里就完了吗?并没有!明明只有4种买法,干嘛要循环这么多次。
for (int n = 0; n < 4; n++){
cout << "公鸡" << 4 * n << "只,母鸡" << 25 - 7 * n << "只,小鸡" << 75 + 3 * n << "只\n";
count++;
i++;
}
对这个循环不理解的小伙伴,可以自己列一个方程组算一下,小学毕业的水平就够了。
至于为什么是n<4,因为n=4的时候Y=-3,这就不合理了。
注:这里只是为了演示一下效果,所有的数字都写死了,大家最好不要这样干。常量最好还是用#define或const定义一下,然后放在main函数外面,能提高程序的可读性,也便于维护。