#40 问题求解(二)——穷举法解题

本文通过多个编程项目展示了如何使用穷举法来解决各种问题,包括小明借书、水仙花数、鸡兔共笼、换分币等。每个项目包含代码实现、执行结果及错误分析,旨在帮助读者理解穷举法在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目1-小明借书

小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?

代码
/**
*Copyright @2018,优快云学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2018年9月18日
*版 本 号:v1.0
*问题描述:【项目1-小明借书】
小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?
提示:本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从
1至5进行编号,然后使用穷举的方法。假设三个人分别借这五本书中的一本,当三个人所借的书的编号
都不相同时,就是满足题意的一种借阅方法。
*/
#include <stdio.h>
int main()
{
   
   
    int a,b,c,count=0;
    for (a=1; a<=5; a++) //五本书编号1-5
        for (b=1; b<=5; b++)
            for (c=1; c<=5; c++)
            {
   
   
                if ((a==b)||(b==c)||(a==c))
                    continue;
                else
                {
   
   
                    count++;
                    printf("a=%d\t,b=%d\t,c=%d\n",a,b,c);
                }
            }
    printf("%d",count);
    return 0;
}
执行结果

在这里插入图片描述

错误代码
    for (a=1; a<=5; a++) //五本书编号1-5
        for (b=1; a!=b&&b<=5; b++)
            for (c=1; a!=c&&b!=c&&c<=5; c++)
            {
   
   
                count++;
                printf("a=%d\t,b=%d\t,c=%d\n",a,b,c);
            }

分析:直接错过b=1或者c=1等情况,。abc必须要遍历1-5,再从遍历中选择满足条件的数据

项目2-水仙花数

对于三位数字,若各位数字立方和等于该数,该数就是水仙花数。如153:153=13+53+33

代码
/**
*Copyright @2018,优快云学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2018年9月18日
*版 本 号:v1.0
*问题描述:【项目2-水仙花数】
对于三位数字,若各位数字立方和等于该数,该数就是水仙花数。如153:153=13+53+33
*/
#include <stdio.h>
int main()
{
   
   
    int a=1,b=0,c=0,d,e;
    for(a=1; a<=9; a++)
        for(b=0; b<=9; b++)
            for(c=0; c<=9; c++)
            {
   
   
                d=100*a+10*b+c;
                e=a*a*a+b*b*b+c*c*c;
                if(d==e)
                    printf("%d\t", d);
            }
    return 0;
}
执行结果

在这里插入图片描述

项目3-鸡兔共笼

鸡兔共有30只,脚共有90只,问鸡兔各有多少?

代码
/**
*Copyright @2018,优快云学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2018年9月18日
*版 本 号:v1.0
*问题描述:【项目3-鸡兔共笼】
鸡兔共有30只,脚共有90只,问鸡兔各有多少?
*/
#include <stdio.h>
int main ()
{
   
   
    int i,j;
    for (i=0;i<=30;i++)
    {
   
   
        j=30-i;
        if (2*i+4*(30-i)==90)
            printf("i=%d\t j=%d",i,j);
    }
    return 0;
}
执行结果

在这里插入图片描述

项目4-换分币

用一元人民币兑换成1分、2分和5分硬币,有多少种不同的兑换方法?请输出所有可能的方案。
提示:根据题意设i,j,k分别为兑换的1分、2分、5分硬币的枚数,则i,j,k的值应满足:i+j2+k5=100,根据取值范围构造循环解题即可。

代码
/**
*Copyright @2018,优快云学院
*All rights reserved.
*文件名称:main.c
*作    者:袁生
*完成日期:2018年9月18日
*版 本 号:v1.0
*问题描述:【项目4-换分币】
用一元人民币兑换成1分、2分和5分硬币,有多少种不同的兑换方法?请输出所有可能的方案。
*/
#include <stdio.h>
int main ()
{
   
   
    int i,j,k,count=0;
    for (i=0; i<=100; i++)
        for 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值