这篇文章讲述的是算法初级部分的借书方案知多少问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
假设有5本书,要借给A,B,C三个人,若每人每次只能借一本,则可以有几种不同的借法?
算法分析
假设1-5的序号对应5本书,三层循环对应A,B,C所借走的书,A,B,C的取值范围都为1-5 若 !=B && B!=C && A!=C,则为有效借书方法 。
代码实现
public class Q2_Book {
/**
* 问题描述:假设有5本书,要借给A,B,C三个人,若每人每次只能借一本,则可以有几种不同的借法?
*
* 算法思想:假设1-5的序号对应5本书,三层循环对应A,B,C所借走的书,
* A,B,C的取值范围都为1-5
* 若A!=B && B!=C && A!=C,则为有效借书方法
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//穷举法:时间复杂度(N*N*N)
int A , B , C ;
int sum = 0 ; //统计一共有多少种借法
for( A=1 ; A<=5 ; A++)
for( B=1 ; B<=5 ; B++)
for( C=1 ; C<=5 ; C++){
if(A!=B && B!=C && A!=C){
System.out.print("A借:" + A + " B借:" + B + " C借:" + C+"; ");
sum++ ;
if(sum%5 == 0)
System.out.println("");
if(sum%25 == 0)
System.out.println();
}
}
System.out.println();
System.out.println("共有:" + sum + "种借法");
}
}
样例输出
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种借法