- 论坛徽章:
- 0
|
本帖最后由 ywj1225 于 2014-07-30 14:32 编辑
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- # 有两个数组a,b,大小都为n,数组元素的值任意,无序;
- # 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- a = [1, 2, 3, 4, 5, 50]
- b = [9, 8 ,7, 6, 100, 25 ]
- c = a + b
- c.sort()
- c.reverse()
- a = []
- b = []
- a.append(c[0])
- b.append(c[1])
- lenth = len(c)
- i = 2
- while i < lenth:
- if sum(a) > sum(b):
- if i+1 < lenth and sum(a) > sum(b) + c[i] + c[i+1]:
- b.append(c[i])
- a.append(c[lenth-1])
- i += 1
- lenth -= 1
- b.append(c[i])
- a.append(c[lenth-1])
- i += 1
- lenth -= 1
- elif sum(a) > sum(b):
- b.append(c[i])
- i += 1
- a.append(c[i])
- i += 1
- else:
- a.append(c[i])
- i += 1
- b.append(c[i])
- i += 1
- else:
- if i+1 < lenth and sum(b) > sum(a) + c[i] + c[i+1]:
- a.append(c[i])
- b.append(c[lenth-1])
- i += 1
- lenth -= 1
- a.append(c[i])
- b.append(c[lenth-1])
- i += 1
- lenth -= 1
- elif sum(a) > sum(b):
- a.append(c[i])
- i += 1
- b.append(c[i])
- i += 1
- else:
- b.append(c[i])
- i += 1
- a.append(c[i])
- i += 1
-
- print a
- print b
-
- print sum(a)-sum(b)
复制代码 总体由大到小排序放入c中,最大的两个数分别放两个数组a和b里,如果a的和比b的和加上c里面剩余数字最大的两个还大的话,把c里面最大的两个数放入b中,最小的两个数放入a中;如果a的和单单比b的和大的话,把c中两个最大的数中大的放入b中,小的放入a中。。。
只是进行一些测试,不知道完全行得通不,还望指点。
发现问题很大了。 |
|