第二天 借书方案知多少
1.问题描述
小明有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以
有多少种不同的借法?
2. 问题分析
本题属于数学当中常见的排列组合问题,即求从5个数中取3个不同数的排列组合的
总数。我们可以将5本书进行1~5的编号,A、B、C3个人每次都可以从5本书中任选1
本,即每人都有5种选择,由于1本书不可能同时借给一个以上的人,因此只要这3个人
所选书的编号不同,即为一次有效的借阅方法。
3.算法设计
对于每个人所选书号,我们可以采用穷举循环来实现,即从每个人可选书号(32.
3、4、5)的范围内进行穷举,从而得到可行的结果。对第l个人的选择,我们可以用循环
将其列出:for(a=1;a<=5;at+),同理对于第2个人、第3个人可以用同样的方法。由于
本书只能借给一个人,所以第2个人的选择会受到第1个人的限制,最后一个人的选择会
受到第2个人的限制,即后面的选择都是在前面选择的前提下进行的,所以可采用循环的
嵌套来解决问题。
利用循环解决问题的时候,找到循环的三要素:循环变量的初值、循环的控制条件,
以及使循环趋于结束的循环变量值的改变是进行编程的关键。读者可参照第一个例子来找
一下本题中所对应的循环三要素。本题的输出结果有一个条件限制,即3个人所选书号各
不相同。在输出语句前只要用一个if语句if(a!=b&&a!=c&&c!=b)判断即可。
#include<iostream>
using namespace std;
int main() {
int i, j, k;
for (i = 1; i <= 5; i++) {
for (j = 1; j <= 5; j++) {
for (k = 1; k <= 5; k++) {
if (i != j && j != k) {
cout << "A: " << i << " B: " << j << " C: " << k << endl;
}
}
}
}
}

浙公网安备 33010602011771号