- 积分
- 46
- 注册时间
- 2007-4-28
- 仿真币
-
- 最后登录
- 1970-1-1
|
题目来自Cody,就是找出集合的子集,使得子集的和为原集合的一半- Given a vector x, return the indices to elements that will sum to exactly half of the sum of all elements.
- Example:
- Input x = [1 2 3 4 5 6 7]
- Output xi = [1 6 7]
- because
- sum(x) = 28
- sum(x([1 6 7])) = 14
- The answer is not necessarily unique and the order is unimportant. We will just test to make sure that sum(x)/2 is sum(x(xi))
复制代码 以下是测试函数- 1
- %%
- x = [1 2 3 4 5 6 7];
- xi = split_it(x);
- assert(isequal(sum(x(xi)),sum(x)/2));
- 2
- %%
- x = [2 2 2 2 2 2];
- xi = split_it(x);
- assert(isequal(sum(x(xi)),sum(x)/2));
- 3
- %%
- x = [2 5 4 5 4];
- xi = split_it(x);
- assert(isequal(sum(x(xi)),sum(x)/2));
- 4
- %%
- x = [1 3 1 1 9 7];
- xi = split_it(x);
- assert(isequal(sum(x(xi)),sum(x)/2));
- 5
- %%
- x = primes(100);
- xi = split_it(x);
- assert(isequal(sum(x(xi)),sum(x)/2));
复制代码 希望大家一起讨论
原题目链接:http://www.mathworks.cn/matlabcentral/cody/problems/660-find-a-subset-that-divides-the-vector-into-equal-halves
|
|