穷举法的三个典型应用例题

    穷举法也称为暴力破解法,简单来说就是举出所有的情况例子。

下面来看三个典型应用例题:

    1.两个乒乓球队进行比赛,各出3人。甲队为 A,B,C  3人,乙队为 X,Y,Z  3人。巳抽签决定比赛名单,有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序输出3对赛手的名单 。

int main() {
	for (char a = 'X'; a <= 'Z'; a++)//A的所有对手
	{
		for (char b = 'X'; b <= 'Z'; b++)//B的所有对手
		{
			for (char c = 'X'; c <= 'Z'; c++)//C的所有对手
			{
				if (a != 'X' && c != 'X' && c != 'Z' && a != b && a != c && b != c) {
					printf("A->%c,B->%c,C->%c", a, b, c);
				}
			}
		}
	}
	return 0;
}

2.有1元,5元,10元的人民币若干,现在需要18,一共有多少种组合情况?

int main() {
	int count = 0;//统计组合
	for (int a = 10, x = 0; x < 2; x++) {
		for (int b = 5, y = 0; y < 4; y++) {
			for (int c = 1, z = 0; z < 19; z++) {
				if (a * x + b * y + c * z == 18) {
					count++;
					printf("%d张10元,%d张5元,%d张1元\n", x, y, z);
				}
			}
		}
	}
	printf("一共有%d种组合", count);
	return 0;
}

3.在一个陌生的国度,有5种不同的硬币单位:15、23、29、41和67(分)。
 寻找所有组成18元8分(即1808分)的可能组合。假定对于所有面值的硬币你都有足够的硬币(此题的组合情况较多)。

int main() {
	int count = 0;
	for (int a = 15, p = 0; p <= (1808 / a); p++) {
		for (int b = 23, q = 0; q <= (1808 / b); q++) {
			for (int c = 29, x = 0; x <= (1808 / c); x++) {
				for (int d = 41, y = 0; y <= (1808 / d); y++) {
					for (int e = 67, z = 0; z <= (1808 / e); z++) {
						if (a * p + b * q + c * x + d * y + e * z == 1808) {
							count++;
							printf("%d个15分,%d个23分,%d个29分,%d个41分,% d个67分\n",
                                     p, q, x, y, z);
						}
					}
				}
			}
		}
	}
	printf("一共有%d种可能组合\n", count);
	return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值