知识目标
循环的综合应用
学习目标
熟练应用循环
讲一讲
百鸡问题
问题描述:
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,现有百钱买百鸡。问:翁、 母、雏各几何?请写出所有可能的方法。
样例输出:
0 25 75
4 18 78
8 11 81
12 4 84
友情提示:
完整代码:
#include<iostream>
using namespace std;
int main(){
int x,y,z;
for(x=0;x<=20;x++){
for(y=0;y<=33;y++){
z=100-x-y;
if(5*x+3*y+z/3==100&&z%3==0){
cout<<x<<" "<<y<<" "<<z<<endl;
}
}
}
return 0;
}
卖饼干
问题描述:
已知库存有 10 箱五斤重的,4 箱两斤重的, 8 箱一斤重的,假设客户需要 n 斤重的饼干,在不必拆箱的情况下,完成配货,请你帮助阿狸完成这个工作。
输入:客户需要购买的饼干斤数( 1<=n<=100 )。
输出:如果库存满足客户需求,则给出所有配货方案;否则输出“NO”。
样例输入 :
9
样例输出:
0 1 7
0 2 5
0 3 3
0 4 1
1 0 4
1 1 2
1 2 0
问题分析:
代码示例:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
if(n>66)
cout<<"NO";
else{
for(int i=0;i<=10;i++){
for(int j=0;j<=4;j++){
for(int k=0;k<=8;k++){
if(k==(n-i*5-j*2))
cout<<i<<" "<<j<<" "<<k<<endl;
}
}
}
}
return 0;
}
百马驮百货
问题描述:
国王命令大臣给驻守边疆的将士送货资,由于旅途遥远,马夫有限,仅能允许 100 马出行, 需要运送 100 担货,大型马可驮 3 担,中型马驮 2 担,两 匹小型马可协作驮一担。请问:大、中、小型马各安排多少匹可恰好满足需求?
样例输出:
2 30 68
5 25 70
8 20 72
11 15 74
14 10 76
17 5 78
20 0 80
代码示例:
#include<iostream>
using namespace std;
int main(){
int b=0, m=0, s=0;
//外层循环控制大马的数量最多在 33 只(等于 34 百担货物不够);
for(b=0; b<=33; b++){
//内外层循环控制下,小马的数量受大、中马数量的制约;
for(m=0; m<=50; m++){ //内层循环控制中马的数量;
s = 100-b-m;
if(b*3 + m*2 + 0.5*s == 100)
//每种马*所能驮的担数之和=100 担,0.5 是假定 1 匹马驮半担;
cout<< b<<' '<< m<< ' '<< s<<endl;
}
}
return 0;
}
戴夫的商店
问题描述:
戴夫将所有图书分为三类,一类图书定价五元,二类图书定价两元,三类图书定价一元,已知三类图书分别有 a ,b ,c 本,如果购买者想要购入 n 元 的图书,戴夫可以有多少种组合销售方式呢?
输入:包括四个整数,前三个代表三类图书的本数,后一个代表购买者准备花费的 金额数。输出:如果戴夫能够满足购买者的需求,则输出所有组合方式,否则输出“NO”。
样例输入:
1 4 8 8
样例输出:
0 0 8
0 1 6
0 2 4
0 3 2
0 4 0
1 0 3
1 1 1
完整代码:
#include<iostream>
using namespace std;
int main(){
int n,a,b,c,temp=0,cnt=0;
cin>>a>>b>>c>>n;
temp=5*a+2*b+1*c;
if(temp<n)
cout<<"NO";
else{
for(int i=0;i<=a;i++){
for(int j=0;j<=b;j++){
for(int k=0;k<=c;k++){
if(k==(n-i*5-j*2)){
cout<<i<<" "<<j<<" "<<k<<endl;
cnt++;
}
}
}
}
}
if(cnt==0)
cout << "NO";
return 0;
}