33,027
社区成员




#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;
}
//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;
}