69,371
社区成员
发帖
与我相关
我的任务
分享
int findNInt(int *original,int count,int a)
{
if(count > 0)
{
if( original[0] == a)
{
return 1;
}
else if(findNInt(original+1, count-1, a) == 1)
{
return 1;
}
else if(findNInt(original+1, count-1, a-original[0]) == 1)
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
#include <stdio.h>
#include <math.h>
void PrintResult(int *arr, int count, int a);
int findNInt(int *original,int count,int a);
int main(int argc, char *argv[]) {
int arr1[4] = {1, 3, 5, 7};
int arr2[4] = {2, 4, 6, 8};
PrintResult(arr1, 4, 8);
PrintResult(arr1, 4, 13);
PrintResult(arr2, 4, 8);
PrintResult(arr2, 4, 13);
return 0;
}
void PrintResult(int *arr, int count, int a) {
int i;
for (i = 0; i < count; i++)
printf("%d ", arr[i]);
printf(": %d\t", a);
if (findNInt(arr, count, a))
printf("Found!\n");
else
printf("Can't.\n");
}
int findNInt(int *original,int count,int a) {
unsigned TT = exp2(count), tt, t;
int sum;
int j;
for (tt = 0; tt < TT; tt++) {
sum = 0;
for (j = 0, t = tt; j < count; j++, t /= 2)
if (t % 2)
sum += original[j];
if (sum == a)
return 1;
}
return 0;
}
测试输出:
1 3 5 7 : 8 Found!
1 3 5 7 : 13 Found!
2 4 6 8 : 8 Found!
2 4 6 8 : 13 Can't.
int findNInt(int *original,int count,int a)
{
if(count > 0)
{
if( original[0] == a)
return 1;
else if(findNInt(original+1, count-1, a) == 1)
return 1;
else if(findNInt(original+1, count-1, a-original[0]) == 1)
return 1;
else
return 0;
}
}
但依然不敢确认是否正确。int findNInt(int *original,int count,int a)
{
if(count > 0)
{
int tmp = original[0];
if( tmp == a)
return 1;
else if(findNInt(original+1, count-1, a) == 1)
return 1;
else if(findNInt(original+1, count-1, a-tmp) == 1)
return 1;
else
return 0;
}
}
根据1楼的思想写的,不确认是否正确。