“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”
1、凭直觉靠蛮力算法解决问题
#include<iostream>
using namespace std;
int main(){
int x,y,z;
for(x=0;x<=100;x++){
for(y=0;y<=100;y++){
for(z=0;z<=100;z++){
if(x+y+z==100 && 5*x+3*y+z/3==100 && z%3==0){
printf("鸡翁:%d,鸡母:%d,小鸡:%d\n",x,y,z);
}
}
}
}
}
2、缩小三种鸡数量的可能范围,优化算法减少计算
#include<iostream>
using namespace std;
int main(){
int x,y,z;
for(x=0;x<=20;x++){
for(y=0;y<=33;y++){
for(z=0;z<=300;z++){
if(x+y+z==100 && 5*x+3*y+z/3==100 && z%3==0){
printf("鸡翁:%d,鸡母:%d,小鸡:%d\n",x,y,z);
}
}
}
}
}
3、进一步优化算法
#include<iostream>
int main(){
int x,y;100-x-y;
for(x=0;x<=200;x++){
for(y=0;y<=333;y++){
if(5*x+3*y+(100-x-y)/3==100 && (100-x-y)%3==0){
printf("鸡翁:%d,鸡母:%d,小鸡:%d\n",x,y,100-x-y);
}
}
}
}