题目:给定数组a1,a2…an,n<10000。判断是否其中几个数之和为k,每个下标的数字仅可用一次。,若存在,返回true,不存在返回false。
#include <iostream>
#include<algorithm>
using namespace std;
bool IsContainNumTotalK(int *nums,int size,int k)
{
if (0 == size)
{
return false;
}
for (int i = 0; i < size; i++)
{
if (nums[i]==k)
{
return true;
}
}
if (nums[size-1]>k)//最大数大于K则去掉,重新算
{
return IsContainNumTotalK(nums, size - 1, k);
}
else if (IsContainNumTotalK(nums, size - 1, k - nums[size - 1]))//小于k,那么要不这个数参与
{
return true;
}
else//要不不参与
{
return IsContainNumTotalK(nums, size - 1, k);
}
return false;
}
int main()
{
int nums[5] = { 4,1,2,4,7 };
int k;
cin >> k;
stable_sort(nums, nums + 5);
if (IsContainNumTotalK(nums, 5, k))
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
return 0;
}
有没有好的优化思路呢,欢迎讨论。