初级系列2.借书方案问题

借书方案

问题描述
小明有五本新书,要借给A B C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?
问题分析
属于排列组合问题,即求从5个数中取三个不同数的排列组合的总数
|--将五本书从1 - 5进行编号,A B C三个人每次都可以从5本书中任选1本,即每人都有5种选择,由于1本书不可能同时借给一个以上的人因此只要这三个人所选书的编号不同,即一次有效的借阅方法
算法设计
穷举法, 三重循环

#include <stdio.h>

int main(void)
{
	int a,b, c, i = 0;  /* !< a,b,c分别用来记录三个人所选新书编号,i用来控制有效借阅次数*/
	printf("A,B,C三人所选书号分别为:\n");
	for (a = 1; a <= 5; a++) {          /* !< 用来控制A借阅图书编号*/
		for (b = 1; b <= 5; b++) {      /* !< 用来控制B借阅图书编号*/
			for (c = 1; c <= 5; c++) {  /* !< 用来控制C借阅图书编号*/
				if (a != b && a != c && c != b) { /*此条件用来控制有效借阅组合*/
					printf("A:%2d B:%2d C:%2d   ", a, b, c);
					i++;
					if (i % 4 == 0) {       /*每行最多输出4种借阅方法组合*/
						printf("\n");       /*输出有效的借阅方法总数*/
					}
				}
			}
		}
	}
	printf("共有%d种有效借阅方法\n", i);
}

#!/usr/bin/python3
i = 0
for a in range(1, 6):
	for b in range(1, 6):
		for c in range(1, 6):
			if a != b and a != c and b != c:
				print("a, b, c", a, b, c)
				i += 1

print("have methods: i", i)

/* !< output */
a, b, c 1 2 3
a, b, c 1 2 4
a, b, c 1 2 5
a, b, c 1 3 2
a, b, c 1 3 4
a, b, c 1 3 5
a, b, c 1 4 2
a, b, c 1 4 3
a, b, c 1 4 5
a, b, c 1 5 2
a, b, c 1 5 3
a, b, c 1 5 4
a, b, c 2 1 3
a, b, c 2 1 4
a, b, c 2 1 5
a, b, c 2 3 1
a, b, c 2 3 4
a, b, c 2 3 5
a, b, c 2 4 1
a, b, c 2 4 3
a, b, c 2 4 5
a, b, c 2 5 1
a, b, c 2 5 3
a, b, c 2 5 4
a, b, c 3 1 2
a, b, c 3 1 4
a, b, c 3 1 5
a, b, c 3 2 1
a, b, c 3 2 4
a, b, c 3 2 5
a, b, c 3 4 1
a, b, c 3 4 2
a, b, c 3 4 5
a, b, c 3 5 1
a, b, c 3 5 2
a, b, c 3 5 4
a, b, c 4 1 2
a, b, c 4 1 3
a, b, c 4 1 5
a, b, c 4 2 1
a, b, c 4 2 3
a, b, c 4 2 5
a, b, c 4 3 1
a, b, c 4 3 2
a, b, c 4 3 5
a, b, c 4 5 1
a, b, c 4 5 2
a, b, c 4 5 3
a, b, c 5 1 2
a, b, c 5 1 3
a, b, c 5 1 4
a, b, c 5 2 1
a, b, c 5 2 3
a, b, c 5 2 4
a, b, c 5 3 1
a, b, c 5 3 2
a, b, c 5 3 4
a, b, c 5 4 1
a, b, c 5 4 2
a, b, c 5 4 3
have methods: i 60
posted @ 2019-09-08 09:31  电院院长  阅读(333)  评论(0编辑  收藏  举报