C语言借书方案知多少代码解析

栏目: C · 发布时间: 5年前

内容简介:小明有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种有效借阅方法

C语言借书方案知多少代码解析

知识点补充

利用循环解决问题的时候,找到循环的三要素:循环变量的初值、循环的控制条件,以及使循环趋于结束的循环变量值的改变是进行编程的关键。读者可参照第一个例子来找一下本题中所对应的循环三要素。本题的输出结果有一个条件限制,即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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

启示录

启示录

[美] Marty Cagan / 七印部落 / 华中科技大学出版社 / 2011-5 / 36.00元

为什么市场上那么多软件产品无人问津,成功的产品凤毛麟角?怎样发掘有价值的产品?拿什么说服开发团队接受你的产品设计?如何将敏捷方法融入产品开发?过去二十多年,Marty Cagan作为高级产品经理人为多家一流企业工作过,包括惠普、网景、美国在线、eBay。他亲历了个人电脑 、互联网、 电子商务的起落沉浮。《启示录:打造用户喜爱的产品》从人员、流程、产品三个角度介绍了现代软件(互联网)产品管理的实践经......一起来看看 《启示录》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具