zju 1204 一直runtime error

fdar 2009-03-25 09:49:09
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1204

测试数据对了,但是一直runtime error, 但是坚持了很久也没发现数组越界的地方,请问哪里错了...


#include <iostream>
#include <algorithm>
using namespace std;

int used[32]; //放达成条件的数字
int dig[32]; //放数字
int t, n, len, last, flag;

int cmp( const void *p1, const void *p2) {
return *((int *)p1) - *((int *)p2);
}

void dfs(int a, int k, int sum, int x) { //回溯
int i;
if( len == a ) {
if(binary_search(dig, dig + n, sum)) {
flag = 1;
for( i = 0; i < k; i++ ) {
if( i != k - 1)
printf("%d+", used[i]);
else
printf("%d=%d\n", used[i], sum);
}
}
return;
}

else {

for( i = x; i < n; i++ ) {
if( sum + dig[i] > last ) return;
used[k] = dig[i];
sum += dig[i];
dfs(a+1, k+1, sum, i+1);
sum -= dig[i];
}

}

}

int main() {
int i, j, sum, k;
scanf("%d", &t);
memset(used, 0, sizeof(used));
while(t--) {
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &dig[i]);
qsort(dig, n, sizeof(dig[0]), cmp);
k = 0; last = dig[n-1];
flag = 0;
for( len = 2; len < n; len++) {
sum = 0;
for( i = 0; i < n; i++ ) {
used[k] = dig[i];
sum += dig[i];
dfs(1, k+1, sum, i+1);
sum -= dig[i];
}
}
if(!flag)
printf("Can't find any equations.\n");
if(t) printf("\n");
}
system("pause");
return 0;
}

...全文
116 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdar 2009-03-26
  • 打赏
  • 举报
回复
没人回答啊!!
baihacker 2009-03-26
  • 打赏
  • 举报
回复

//this code can ac the problem
//这是一个简单的搜索题目

#include <iostream>
#include <deque>
#include <vector>
using namespace std;

int n, data[35], found, sol[35];

int exist(int value)
{
int lo = 0, hi = n - 1;
while (lo<=hi)
{
int mid = (lo+hi)/2;
if (data[mid] == value)return 1;
if (value < data[mid]) hi = mid - 1;
else lo = mid + 1;
}
return 0;
}

void search(int start, int dest_cnt, int curr_cnt, int curr_sum)
{
if (curr_cnt == dest_cnt)
{
if (exist(curr_sum))
{
for (int i = 0; i < dest_cnt-1; ++i) printf("%d+", sol[i]);
printf("%d=%d\n", sol[dest_cnt-1], curr_sum);
found = 1;
}
}
else
{
for (int i = start; i < n; ++i)
{
if (curr_sum + data[i] <= data[n-1])
{
sol[curr_cnt] = data[i];
search(i+1, dest_cnt, curr_cnt+1, curr_sum + data[i]);
}
else
{
break;
}
}
}
}

int main(void)
{
int cas;
scanf("%d", &cas);
while (cas--)
{
scanf("%d", &n);
for (int i = 0; i < n; ++i) scanf("%d", data+i);
found = 0;sort(data, data+n);
for (int i = 2; i <= n-1; ++i) search(0, i, 0, 0);
if (!found) printf("Can't find any equations.\n");
puts("");
}
return 0;
}

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧