借书方案知多少

一、问题描述:

  小明有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;
}
View Code
结果:

 

 

  代码优化:

  如果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;
}
View Code
结果:

 

 

 

posted @ 2023-04-14 19:43  海绵宝宝222  阅读(208)  评论(0)    收藏  举报