有三门课程分别是a,b,c,它们完成课时和普通稍有不同,它们会在一定周数后完成整个教学计划,而不是像一般普通整个学期内完成这门课的教学计划。现这三门课假设完成周次分别为:a课程会在6周内完成,b课程会在6周内完成,c课程会在4周内完成。且这三门课会两两组合一起上。
示例中可以推导出:
a,c一起上2周
b,c一起上2周
a,b一起上4周
正好完成了两两一起上的组合。请问遇到其它周次完成的怎么拆分周次正好可以完成两两一起上的组合。
首先 选c(即周次最小的那个),跟 a 、b轮询~
及c=c-n,a=a-n & c=c-n , b=b-n直到c=0
然后算 a(比c大的下一个)
分别跟剩下的轮询
。。。
直到最大的那个为0.
嗯,这方面是可行,谢啦!!!
这是一个排列与组合的问题;建议你找找排列组合这方面的数据公式什么的,这样你把那个公式应用到你程序中,应该就没有问题了;
这个问题属于哪种排列组合呀?
其实就是一个N元一次方程组(N表示有多少门课)。拿你的例子来说:3门课L1 L2 L3, 需要的时间为T1 T2 T3。假设L1 L2一起上的时间为X1, L2 L3一起上的时间为X2, L1 L3一起上的时间为X3。那么很容易有这个方程:
X1 + X3 = T1 X1 + X2 = T2 X2 + X3 = T3
那你只要解这个3元1次方程组的所有非负整数解就可以了。 用计算机很容易讲它扩展到N元方程组的情况。