5,530
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
FILE *F15, *F500;
int A[1024];
bool checkSum(int count, int x, int *result) //count表示所添加为第几个元素
{
for (int i = 0; i<2^(count-1);i++)
{
int sum = A[i]+x;
for(int j=0; j<2^(count-1); j++)
{
if(sum==A[j])
return false;
}
A[2^(count-1)+i] = sum;
}
result[count-1] = x;
return true;
}
void getSubset(int *arr, int start,int *result,int count,int num,int len,FILE *F)
{
for (int i = start; i >= num-count;)
{
if (count == num) //此时在添加最后一个元素
{
if (checkSum(count,arr[i], result))
{
for (int j = num - 1;j >= 0;j--)
{
fprintf(F,"%d\t",result[j]);
}
fprintf(F,"\n");
}
}
else
{
if (checkSum(count,arr[i], result))
{
getSubset(arr, i-1, result, count+1, num, len, F);
}
getSubset(arr, i-1, result, count, num, len, F);
}
}
}
int main()
{
int a[500], a1[5], a2[10];
for (int i=0; i<100; i++)
a[i] = i+1;
A[0] = 0;
// F15 = fopen("15.xls","w");
F500 = fopen("500.xls","w");
// getSubset(a,15-1,a1,1,5,15,F15);
// fclose(F15);
getSubset(a,500-1,a2,1,10,500,F500);
fclose(F500);
return 0;
}
#include <stdio.h>
#include <math.h>
FILE *F15, *F500;
int A[1024];
bool checkSum(int count, int x, int *result) //count表示所添加为第几个元素
{
for (int i = 0; i<pow(2,count-1);i++)
{
int sum = A[i]+x;
for(int j=0; j<pow(2,count-1); j++)
{
if(sum==A[j])
return false;
}
A[int(pow(2,count-1))+i] = sum;
}
result[count-1] = x;
return true;
}
void getSubset(int *arr, int i,int *result,int count,int num,int len,FILE *F)
{
if(i>=num-count)
{
if (count==num) //此时在添加最后一个元素
{
if (checkSum(count,arr[i], result))
{
for (int j = num - 1;j >= 0;j--)
{
fprintf(F,"%d\t",result[j]);
}
fprintf(F,"\n");
}
getSubset(arr, i-1, result, count, num, len, F);
}
else
{
if (checkSum(count,arr[i], result))
{
getSubset(arr, i-1, result, count+1, num, len, F);
}
getSubset(arr, i-1, result, count, num, len, F);
}
}
}
int main()
{
int a[500], a1[5], a2[10];
for (int i=0; i<100; i++)
a[i] = i+1;
A[0] = 0;
F15 = fopen("15.xls","w");
F500 = fopen("500.xls","w");
getSubset(a,15-1,a1,1,5,15,F15);
fclose(F15);
getSubset(a,500-1,a2,1,10,500,F500);
fclose(F500);
return 0;
}
哪位大神有算法上的好的建议?void getSubset(int *arr, int start,int *result,int count,int num,int len,FILE *F)
{
for (int i = start; i >= num-count;)
{
if (count == num) //此时在添加最后一个元素
{
if (checkSum(count,arr[i], result))
{
for (int j = num - 1;j >= 0;j--)
{
fprintf(F,"%d\t",result[j]);
}
fprintf(F,"\n");
}
getSubset(arr, i-1, result, count, num, len, F);
}
else
{
if (checkSum(count,arr[i], result))
{
getSubset(arr, i-1, result, ++count, num, len, F);
}
getSubset(arr, i-1, result, count, num, len, F);
}
}
}