枚举算法

枚举算法的基本思想

  • 枚举算法是我们在日常中使用到的最多的一个算法,它的核心思想就是:枚举所有的可能。
  • 枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:(1)可预先确定候选答案的数量;(2)候选答案的范围在求解之前必须有一个确定的集合。
  • 枚举结构:循环+判断语句。

枚举法的优缺点

枚举算法的优点:

  1. 由于枚举算法一般是现实生活中问题的“直译”,因此比较直观,易于理解
  2. 由于枚举算法建立在考察大量状态、甚至是穷举所有状态的基础上,所以算法的正确性比较容易证明

枚举算法的缺点:

枚举算法的效率取决于枚举状态的数量以及单个状态枚举的代价,因此效率比较低。

使用枚举法解题的基本思路:

  1. 确定枚举对象、范围和判定条件。
  2. 逐一枚举可能的解并验证每个解是否是问题的解。

枚举算法实例:

砝码称重:

题目:

【问题描述】设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),求用这些砝码能称出不同的重量个数。

【文件输入】输入1g、2g、3g、5g、10g、20g的砝码个数。

【文件输出】输出能称出不同重量的个数。

【样例输入】1 1 0 0 0 0

【样例输出】3

源代码:

import java.util.Scanner;

public class 砝码称重 {
	public static void main(String[] args) {
		Scanner sc  = new Scanner(System.in);
		int[] a = new int [1001];
		int[] b = new int [7]; //用来存放各个砝码的个数
		int[] c = {0, 1, 2, 3, 5, 10, 20};
		int[] arr = new int [7];
		for(int i=1; i<b.length; i++) 
			b[i] = sc.nextInt();
		for(arr[1]=0; arr[1]<=b[1]; arr[1]++)
	        for(arr[2]=0; arr[2]<=b[2]; arr[2]++)
	            for(arr[3]=0; arr[3]<=b[3]; arr[3]++)
	                for(arr[4]=0; arr[4]<=b[4]; arr[4]++)
	                    for(arr[5]=0; arr[5]<=b[5]; arr[5]++)
	                        for(arr[6]=0; arr[6]<=b[6]; arr[6]++) {
	                            int sum=0;
	                            for(int i=1; i<=6; i++) {
	                                sum+=arr[i]*c[i];
	                                a[sum]=1;
	                            }
	                        }
		int num = 0;
		for(int i=1; i<=1000; i++) {
			if(a[i] == 1)
				num++;
		}
		System.out.println(num);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值