内容简介:小明有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?本题属于数学当中常见的排列组合问题,即求从5个数中取3个不同数的排列组合的总数。可以将5本书进行1〜5的编号,A、B、C 3个人每次都可以从5本书中任选1本,即每人都有5种选择,由于1本书不可能同时借给一个以上的人,因此只要这3个人所选书的编号不同,即为一次有效的借阅方法。对于每个人所选书号,可以采用穷举循环来实现,即从每个人可选书号(1、2、 3、4、5)的范围内进行穷举,从而得到可行的结果。对第1个人的选择,可
问题描述
小明有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
问题分析
本题属于数学当中常见的排列组合问题,即求从5个数中取3个不同数的排列组合的总数。可以将5本书进行1〜5的编号,A、B、C 3个人每次都可以从5本书中任选1本,即每人都有5种选择,由于1本书不可能同时借给一个以上的人,因此只要这3个人所选书的编号不同,即为一次有效的借阅方法。
算法设计
对于每个人所选书号,可以采用穷举循环来实现,即从每个人可选书号(1、2、 3、4、5)的范围内进行穷举,从而得到可行的结果。对第1个人的选择,可以用循环将其列出:for(a=1; a<=5; a++),对于第2个人、第3个人可以用同样的方法。由于一本书只能借给一个人,所以第2个人的选择会受到第1个人的限制,最后一个人的选择会受到第2个人的限制,即后面的选择都是在前面选择的前提下进行的,所以可釆用循环的嵌套来解决问题。
下面是完整的代码:
#include
int main()
{
int a, b, c, i=0; /*a,b,c分别用来记录三个人所选新书编号,i用来控制有效借阅次数*/
printf("A,B,C三人所选书号分别为:\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 && c!=b) /*此条件用来控制有效借阅组合*/
{
printf("A:%2d B:%2d c:%2d ", a, b, c);
i++;
if(i%4==0)
printf("\n");
} /*每行最多输出4种借阅方法组合*/
printf("共有%d种有效借阅方法\n",i); /*输出有效的借阅方法总数*/
return 0;
}
运行结果:
A,B,C三人所选书号分别为:
A: 1 B: 2 c: 3 A: 1 B: 2 c: 4 A: 1 B: 2 c: 5 A: 1 B: 3 c: 2
A: 1 B: 3 c: 4 A: 1 B: 3 c: 5 A: 1 B: 4 c: 2 A: 1 B: 4 c: 3
A: 1 B: 4 c: 5 A: 1 B: 5 c: 2 A: 1 B: 5 c: 3 A: 1 B: 5 c: 4
A: 2 B: 1 c: 3 A: 2 B: 1 c: 4 A: 2 B: 1 c: 5 A: 2 B: 3 c: 1
A: 2 B: 3 c: 4 A: 2 B: 3 c: 5 A: 2 B: 4 c: 1 A: 2 B: 4 c: 3
A: 2 B: 4 c: 5 A: 2 B: 5 c: 1 A: 2 B: 5 c: 3 A: 2 B: 5 c: 4
A: 3 B: 1 c: 2 A: 3 B: 1 c: 4 A: 3 B: 1 c: 5 A: 3 B: 2 c: 1
A: 3 B: 2 c: 4 A: 3 B: 2 c: 5 A: 3 B: 4 c: 1 A: 3 B: 4 c: 2
A: 3 B: 4 c: 5 A: 3 B: 5 c: 1 A: 3 B: 5 c: 2 A: 3 B: 5 c: 4
A: 4 B: 1 c: 2 A: 4 B: 1 c: 3 A: 4 B: 1 c: 5 A: 4 B: 2 c: 1
A: 4 B: 2 c: 3 A: 4 B: 2 c: 5 A: 4 B: 3 c: 1 A: 4 B: 3 c: 2
A: 4 B: 3 c: 5 A: 4 B: 5 c: 1 A: 4 B: 5 c: 2 A: 4 B: 5 c: 3
A: 5 B: 1 c: 2 A: 5 B: 1 c: 3 A: 5 B: 1 c: 4 A: 5 B: 2 c: 1
A: 5 B: 2 c: 3 A: 5 B: 2 c: 4 A: 5 B: 3 c: 1 A: 5 B: 3 c: 2
A: 5 B: 3 c: 4 A: 5 B: 4 c: 1 A: 5 B: 4 c: 2 A: 5 B: 4 c: 3
共有60种有效借阅方法
知识点补充
利用循环解决问题的时候,找到循环的三要素:循环变量的初值、循环的控制条件,以及使循环趋于结束的循环变量值的改变是进行编程的关键。读者可参照第一个例子来找一下本题中所对应的循环三要素。本题的输出结果有一个条件限制,即3个人所选书号各不相同。在输出语句前只要用一个if语句if(a!=b && a!=c && c!=b)判断即可。
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-01/156366.htm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 每秒解析千兆字节的 JSON 解析器开源,秒杀一大波解析器!
- 注册中心 Eureka 源码解析 —— EndPoint 与 解析器
- 新一代Json解析库Moshi源码解析
- mybatis源码配置文件解析之三:解析typeAliases标签
- MySQL内核源码解读-SQL解析之解析器浅析
- Laravel 核心——IoC 服务容器源码解析(服务器解析)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML5 Programming
Eric Freeman、Elisabeth Robson / O'Reilly Media / 2011-10-18 / USD 49.99
What can HTML5 do for you? If you're a web developer looking to use this new version of HTML, you might be wondering how much has really changed. Head First HTML5 Programming introduces the key featur......一起来看看 《Head First HTML5 Programming》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
JS 压缩/解压工具
在线压缩/解压 JS 代码