借书方案知多少
一、问题描述:
小明有5本新书,要借给A、B、C这3位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
二、思路:
此题为数学问题中的排列组合的问题,题意可以理解为从五本不同的书中任选三本,即有C5^3种选法,然后将这三本不同的书分给三个人,有A3^3种分法。
综上所述,一共有C5^3*A3^3=A5^3=60种选法。
三、算法实现:
设三个人分别为a,b,c。都有五种选择,若三个人选择不同则方案成立。
#include<iostream> using namespace std; int main() { int sum = 0; for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { for (int k = 1; k <= 5; k++) { if (i != j && i != k && j != k) sum++; } } } cout << sum; return 0; }
结果:
代码优化:
如果a,b选的书编号一样,则不用再判断c选的什么书,这样可以减少代码运行时间。
#include<iostream> using namespace std; int main() { int sum = 0; for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { for (int k = 1; i!=j&&k <= 5; k++) { if (i != k && j != k) sum++; } } } cout << sum; return 0; }
结果:

浙公网安备 33010602011771号