【C++】1022 - 百钱百鸡问题(穷举)

用 100 元钱买 100 只鸡,公鸡,母鸡,小鸡都要有。
公鸡 5 元 1 只,母鸡 3 元 1 只,小鸡 1 元 3 只。
请问公鸡,母鸡,小鸡各应该买多少只?

在这里插入图片描述

1.分析问题

  1. 已知:共有100元,买100只鸡,公鸡5元1只,母鸡3元1只,小鸡1元3只
  2. 未知:公鸡g只,母鸡m只,小鸡x只
  3. 关系:5g+3m+x/3=100,g+m+x=100.

2.定义变量

根据分析的已知,未知按需要定义变量。

	//二、数据定义 
	int money=100,g=1,m=1,x=3;

3.输入数据

无。

4.数据计算

4.1 确定问题的范围:根据问题的要求,确定需要尝试的数值范围。

钱:100。
鸡总数:100。
公鸡:最少1只,最多:(100-3-1)/5只。
母鸡:最少1只,最多:总钱数-已买公鸡数量 * 5 - 最少小鸡,即(money-5*g-1)/3只。

4.2 使用循环进行穷举:使用循环结构(如for循环)遍历范围内的每个数值。

g:公鸡的数量。

while(g<=(100-3-1)/5){
    
    
		g++;
	}

4.3 将数值带入问题中进行尝试:将当前数值带入问题中,判断是否满足问题的条件。

m:母鸡的数量。

母鸡数从多到少。

扫描二维码关注公众号,回复: 17336683 查看本文章
	//四、数据计算 
	//输出时,按公鸡数从少到多,母鸡数从多到少的顺序输出
	while(g<=(100-3-1)/5){
    
    
		//母鸡最多数量 
		m=(money-5*g-1)/3;
		while(m>1){
    
    
			x=(money-g*5-m*3)*3;
			if(g+m+x==100){
    
    
			}
			m--;	
		} 
		g++;
	}
	

4.4 如果满足条件,输出结果或进行其他操作。如果当前数值满足问题的条件,可以输出该数值作为问题的解,或进行其他操作。

	//四、数据计算 
	//输出时,按公鸡数从少到多,母鸡数从多到少的顺序输出
	while(g<=(100-3-1)/5){
    
    
		//母鸡最多数量 
		m=(money-5*g-1)/3;
		while(m>1){
    
    
			x=(money-g*5-m*3)*3;
			if(g+m+x==100){
    
    
				//五、输出结果 
				cout<<g<<" "<<m<<" "<<x<<endl;	
			}
			m--;	
		} 
		g++;
	}
	

4.5 继续循环直到穷举完所有可能的解。

5.输出结果

#include<iostream>
using namespace std;
int main(){
    
    
	//一、分析问题
	//已知:共有100元,买100只鸡,公鸡5元1只,母鸡3元1只,小鸡1元3只
	//未知:公鸡g只,母鸡m只,小鸡x只 
	
	//二、数据定义 
	int money=100,g=1,m=1,x=3;
	//三、数据输入 
	//四、数据计算 
	//输出时,按公鸡数从少到多,母鸡数从多到少的顺序输出
	while(g<=(100-3-1)/5){
    
    
		//母鸡最多数量 
		m=(money-5*g-1)/3;
		while(m>1){
    
    
			x=(money-g*5-m*3)*3;
			if(g+m+x==100){
    
    
				//五、输出结果 
				cout<<g<<" "<<m<<" "<<x<<endl;	
			}
			m--;	
		} 
		g++;
	}
	return 0;	
}

猜你喜欢

转载自blog.csdn.net/qq_39180358/article/details/135337481
今日推荐