Question:市场上 公鸡标价:7元/只;母鸡标价:5元/只;雏鸡:1元/3只。现在给你100元,要求买100只鸡,并且要求公鸡、母鸡、雏鸡都必须有,则公鸡、母鸡、雏鸡应该各买几只?
Analysis:
① 公鸡、母鸡、雏鸡三者数量相加为100
cock + hen + chick - 100 == 0
② 买公鸡开销、买母鸡开销、买雏鸡开销相加为100
cock * 7 + hen * 5 + chick / 3 - 100 == 0
③ 雏鸡数量为3的倍数
chick % 3 == 0
④ 若全用来买公鸡且三种鸡都要有
100 - 1 - 5 = 94
94 / 7 = 13
最多可买13只公鸡
④ 若全用来买母鸡且三种鸡都要有
100 - 1 - 7 = 92
92 / 5 = 18
最多可买18只母鸡
④ 若全用来买雏鸡且三种鸡都要有
100 - 7 - 5 = 88
88 * 3 = 264
又 ∵ chick < 100 - 1 - 1
最多可买98只雏鸡
最少要买3只雏鸡
注意点:只要条件不等于0,即为真。因此,条件“x != 0”与条件“x”等价
初始版本
# include<iostream>
using namespace std;
int main(){
for(int cock = 1; cock <= 13; ++cock)
for(int hen = 1; hen <= 18; ++hen)
for(int chick = 3; chick <= 98; +chick){
if(cock * 7 + hen * 5 + chick / 3 - 100) continue;
if(cock + hen + chick - 100) continue;
if(chick % 3) continue;
cout<<"公鸡:"<<cock<<", 母鸡:"<<hen<<", 雏鸡:"<<100-cock-hen<<endl;
}
}
优化版本
# include<iostream>
using namespace std;
int main(){
for(int cock = 1; cock <= 13; ++cock)
for(int hen = 1; hen <= 18; ++hen)
if(cock * 7 + hen * 5 + (100 - cock - hen) / 3 - 100) continue;
if((100 - cock - hen) % 3) continue;
cout<<"公鸡:"<<cock<<", 母鸡:"<<hen<<", 雏鸡:"<<100-cock-hen<<endl;
}
}
注意点:还可以把(100 - cock - hen) % 3 == 0 && cock * 7 + hen * 5 + (100 - cock - hen) / 3 - 100 == 0放入if条件的括号中,仅用双重循环