【C++】1025 - 兑换硬币(穷举)

用一张一元票换 1 分、2 分和 5 分的硬币,每种至少一枚, 问有几种换法?

在这里插入图片描述

1.分析问题

整体放大100倍,不影响结果。

  1. 已知:总钱数:100,1元、2元、5元硬币;。
  2. 未知:1元数量:a;2元数量:b;五元数量:c 。
  3. 关系:a+2b+5c=100。

2.定义变量

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

	
	//二、数据定义 
	int money=100,a,b,c,count=0;

3.输入数据

无。

4.数据计算

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

钱:100。
5元硬币:最少1个,最多:(100-1-2)/5个。
2元硬币:最少1只,最多:总钱数-已换5元硬币数量 * 5 - 1个1元硬币,即(100-1-5*c)/2。

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

这里我们要优先选择换钱数更大的硬币。
原因1:钱数更大,意味外层循环次更少。
原因2:将1元硬币留在最后,那么不管剩多少钱都是可以换整数个。

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

//四、数据计算 
	 
	for(c=1;c<=(100-1-2)/5;c++){
    
    
		for(b=1;b<=(100-1-5*c)/2;b++){
    
    
			
		}
	}
	
	

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

//四、数据计算 
	 
	for(c=1;c<=(100-1-2)/5;c++){
    
    
		for(b=1;b<=(100-1-5*c)/2;b++){
    
    
			count++;
		}
	}
	
	

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

5.输出结果

#include<iostream>
using namespace std;
int main(){
    
    
	//一、分析问题
	//已知:总钱数:100,1元、2元、5元硬币; 
	//未知:1元数量:a;2元数量:b;五元数量:c 
	
	//二、数据定义 
	int money=100,a,b,c,count=0;
	
	//三、数据输入 
	//四、数据计算 
	 
	for(c=1;c<=(100-1-2)/5;c++){
    
    
		for(b=1;b<=(100-1-5*c)/2;b++){
    
    
			count++;
		}
	}
	

	//五、输出结果
	cout<<count; 
	return 0;	
}

猜你喜欢

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