RT,是优快云上的,原帖内容如下:

采用递归,暴力解决方案如下:
#include <stdio.h>
#define MAXLEN 1024
void calc(int *data, int *status, int len, int *value1, int *value2)
{
int i;
*value1 = *value2 = 0;
for (i = 0; i < len; i++)
{
if (status[i] == 0) *value1 = *value1 + data[i];
else *value2 = *value2 + data[i];
}
}
int handler(int *data, int *status, int n, int len)
{
int value1, value2, ret;
if (n < len-1)
{
status[n] = 0;
ret = handler(data, status, n + 1, len);
if (ret > 0) return ret;
status[n] = 1;
ret = handler(data, status, n + 1, len);
if (ret > 0) return ret;
}
status[n] = 0;
calc(data, status, len, &value1, &value2);
if (value1 == value2) return value1;
status[n] = 1;
calc(data, status, len, &value1, &value2);
if (value1 == value2) return value1;
return 0;
}
int main(void)
{
int data[MAXLEN], status[MAXLEN], d, ret, len = 0;
while(1)
{
scanf("%d", &d);
if (d == -1) break;
data[len++] = d;
}
ret = handler(data, status, 0, len);
if (ret > 0) printf("Yes\n%d\n", ret);
else printf("No\n");
return 0;
}
本文介绍了一个使用递归算法解决数组等分问题的C语言实现方案。该方案通过递归方式尝试所有可能的数据分割,以寻找能使数组两部分和相等的划分方法。文章提供了完整的源代码示例。
10万+

被折叠的 条评论
为什么被折叠?



