穷举法的典型应用

本文通过三个实例展示了穷举法的典型应用,包括体育比赛名单确定、硬币组合找零和国际象棋上的八皇后问题。在八皇后问题中,详细解释了穷举法的基本思想,并指出虽然穷举法能找出结果,但面对此类问题,回溯法是一种更优的解决方案,能有效避免冗余路径并找到所有解。最终得出穷举法在某些问题上可能存在效率不足的问题。
摘要由CSDN通过智能技术生成

1.甲乙两队进行比赛,甲队A、B、C三人,乙队X、Y、Z三人,比赛名单已经确定。A不和X比,C不和X、Z比,编程确定名单。

#include<stdio.h>
int main()
{
   
 char i,j,k;//i为A的对手,j为B的对手,k为C的对手
 for(i='X';i<='Z';i++)//A的对手为X、Y、Z中的一个
 {
   
  for(j='X';j<='Z';j++)//B的对手为X、Y、Z中的一个
  {
   
   if(i!=j)//隐含条件:A、B、C的对手不能是同一个人
   {
   
    for(k='X';k<='Z';k++)//C的对手为X、Y、Z中的一个
    {
   
     if(i!=k && j!=k)
     {
   
      if(i!='X' && k!='X' && k!='Z')//题目给定的条件
      {
   
       printf("赛手名单:A对战%c,B对战%c,C对战%c\n",i,j,k);
       break; 
      }
     }
    }
   }
  }
 }
 return 0;
}

2.在一个陌生的国度,有5种不同的硬币(单位为分):15,23,29,41,67,寻找组成18元08分的可能组合,所有硬币都有足够的数目

#include<stdio.h>
int Kindom(){
   
 int count=0;//用于记录组合数目
 for(int i=0;i<=1808/15;i++)//如果硬币组合大于1808分则退出循环
 {
   
  for(int j=0;j<=1808/23;j++)
  {
   
   if(i*15+j*23>1808) continue;//如果硬币组合大于1808分则记性下一次的循环
   for(int k=0;k<=1808/29;k++)
   {
   
    if(i*15+j*23+k*29>1808) continue;
    for(int m=0;j<=1808/41;m++)
    {
   
     if(i*15+j*23+k*29+m*41>1808) continue;
     for(int n=0;n<=1808/67;n++)
     {
   
      if(i*15+j*23+k*29+m*41+n*67==1808)
      {
   
       printf("15:%d   23:%d   29:%d   41:%d   67:%d");//打印可能的硬币组合
       count ++;
      }
      else 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值