1.2 借书方案知多少

发布时间 2023-04-17 12:56:11作者: 自律小子丶

第一部曲:题目要求五本书借给三个人,同一本书不能借给两个人,人之间有区别,所以就是排列A53。可以想到利用三重循环寻找所有的可能性,第一个人的选择不受限制,第二个人的选择受到第一个人选择的限制,最后一个人的选择受到前面两个人选择的限制。注意最后输出可能性的时候,要进行判断是否有重复的。

第二部曲:

 第三部曲:int a,b,c; 三层for循环 判断是否满足条件,三个人借的书都不相同,然后按格式输出 printf(),循环结束后输出方案总数。

第四部曲:

#include<iostream>
using namespace std;
int main()
{
int a,b,c,cnt=0;
for(a=1;a<=5;a++)
{
for(b=1;b<=5;b++)
{
for(c=1;c<=5;c++)
{
if(a!=b&&a!=c&&b!=c)
{
printf("A:%2d B:%2d C:%2d",a,b,c);
cnt++;
if(cnt%4==0)
cout<<endl;
}

}
}
}
printf("共有%d种有效的借阅方法\n",cnt);
return 0;
}

 优化代码:在进入第三层循环前判断是否满足a不等b,减少第三层循环的次数。

#include<iostream>
using namespace std;
int main()
{
int a,b,c,cnt=0;
for(a=1;a<=5;a++)
{
for(b=1;b<=5;b++)
{
for(c=1;c<=5&&a!=b;c++)
{
if(a!=c&&b!=c)
{
printf("A:%2d B:%2d C:%2d",a,b,c);
cnt++;
if(cnt%4==0)
cout<<endl;
}

}
}
}
printf("共有%d种有效的借阅方法\n",cnt);
return 0;
}