借书方案知多少

1、问题描述:小明有5本新书,要借给A、B、C这3位小朋友,若每个人只能借1本,则可以有多少种不同的借法?

2、问题分析:本题属于数学中的排列组合问题,即求5个数中任取3个数进行排列的所有可能数。本题需要进行穷举,穷举出所有可能后,剔除掉不符合题设条件的可能,剩下的便是符合题意的解。由数学知识可得本题共有60种方法,所以此法可以用来大致判断运行结果是否正确。

3、算法设计:因为本题要采用穷举法列出所有可能后,剔除掉不符合条件的那些可能,所以需要进行三重循环来列举所有可能,再用if条件语句进行筛选,if的条件应为(A!=B&&A!=C&&B!=C)。

4、完整程序:

 
#include "stdio.h"
void main()
{
    int A,B,C,i=1;   //A,B,C分别代表A,B,C三人,i代表可能数
    printf("以下为所有可能解法:\n");
    for(A=1;A<=5;A++)  //A的所有可能
        for(B=1;B<=5;B++)  //B的所有可能
            for(C=1;C<=5;C++)  //C的所有可能
            {
                if(A!=B&&A!=C&&B!=C)    //条件判断
                {
                        printf("第%2d种:A:%2d  B:%2d   C:%2d   ",i,A,B,C);  //输出
                        if(i%2==0)
                            printf("\n");
                        i++;
                }
            }
}

5、运行结果:

以下为所有可能解法:
第 1种:A: 1 B: 2 C: 3 第 2种:A: 1 B: 2 C: 4
第 3种:A: 1 B: 2 C: 5 第 4种:A: 1 B: 3 C: 2
第 5种:A: 1 B: 3 C: 4 第 6种:A: 1 B: 3 C: 5
第 7种:A: 1 B: 4 C: 2 第 8种:A: 1 B: 4 C: 3
第 9种:A: 1 B: 4 C: 5 第10种:A: 1 B: 5 C: 2
第11种:A: 1 B: 5 C: 3 第12种:A: 1 B: 5 C: 4
第13种:A: 2 B: 1 C: 3 第14种:A: 2 B: 1 C: 4
第15种:A: 2 B: 1 C: 5 第16种:A: 2 B: 3 C: 1
第17种:A: 2 B: 3 C: 4 第18种:A: 2 B: 3 C: 5
第19种:A: 2 B: 4 C: 1 第20种:A: 2 B: 4 C: 3
第21种:A: 2 B: 4 C: 5 第22种:A: 2 B: 5 C: 1
第23种:A: 2 B: 5 C: 3 第24种:A: 2 B: 5 C: 4
第25种:A: 3 B: 1 C: 2 第26种:A: 3 B: 1 C: 4
第27种:A: 3 B: 1 C: 5 第28种:A: 3 B: 2 C: 1
第29种:A: 3 B: 2 C: 4 第30种:A: 3 B: 2 C: 5
第31种:A: 3 B: 4 C: 1 第32种:A: 3 B: 4 C: 2
第33种:A: 3 B: 4 C: 5 第34种:A: 3 B: 5 C: 1
第35种:A: 3 B: 5 C: 2 第36种:A: 3 B: 5 C: 4
第37种:A: 4 B: 1 C: 2 第38种:A: 4 B: 1 C: 3
第39种:A: 4 B: 1 C: 5 第40种:A: 4 B: 2 C: 1
第41种:A: 4 B: 2 C: 3 第42种:A: 4 B: 2 C: 5
第43种:A: 4 B: 3 C: 1 第44种:A: 4 B: 3 C: 2
第45种:A: 4 B: 3 C: 5 第46种:A: 4 B: 5 C: 1
第47种:A: 4 B: 5 C: 2 第48种:A: 4 B: 5 C: 3
第49种:A: 5 B: 1 C: 2 第50种:A: 5 B: 1 C: 3
第51种:A: 5 B: 1 C: 4 第52种:A: 5 B: 2 C: 1
第53种:A: 5 B: 2 C: 3 第54种:A: 5 B: 2 C: 4
第55种:A: 5 B: 3 C: 1 第56种:A: 5 B: 3 C: 2
第57种:A: 5 B: 3 C: 4 第58种:A: 5 B: 4 C: 1
第59种:A: 5 B: 4 C: 2 第60种:A: 5 B: 4 C: 3
请按任意键继续. . .

 6、问题拓展:

上述代码是在列举完所有可能后进行的条件筛选,我们可以将上述筛选分两步进行,在进行第三重循环前,对A与B进行条件筛选,即为如下代码:

for(A=1;A<=5;A++)

  for(B=1;B<=5;B++)

    for(C=1;C<=5&&A!=B;C++)

    {输出;}     //已经验证过,也是正确的

 
 

转载于:https://www.cnblogs.com/LiuSiyang/p/4389288.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值