需要用到递归思想,每一步可分为三种情况,若还能加就继续递归,若和为K则输出并返回,若和不为K且不能再加则根据输出None或者更新最接近数组c。如果当前b的和距离K更接近,则将当前的b数组复制到c。
非提高版:
// 输入示例(第一行输入k和n,n代表共输入的数)
// 6 6
// 1 2 3 4 5 6
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int k = 0;
int n = 0;
int flag = 0;
void f(int n, int *a, int *b)
{
static int n1 = 0;
static int n2 = -1;
int i;
int j;
for(i = n1;i < 10;i++)
{
if(n > a[i])
{
n1 = i+1;
n2++;
b[n2] = a[i];
n -= a[i];
f(n, a, b);
n += a[i];
n2--;
}
else if(n == a[i])
{
n2++;
b[n2] &#