作者在 2013-06-22 21:53:30 发布以下内容
开始学习编程时曾经练习过此类题,采用的是蛮力法,虽说找的数较全,但因指数级数据处理相当复杂且相当有限,现用动态规划处理,暂时没考虑标记所取的数。
#include <stdio.h>
#include <math.h>
double v[100];
double total(int i,double j)
{
double l,r,t;
if(i==-1||j==0) return 0;
l=total(i-1,j);r=total(i-1,j-v[i])+v[i];
t=fabs(l-j)<fabs(r-j) ? l:r;
return t;
}
int main()
{
int n,i;
double j;
printf("请输入数组的长度");
scanf("%d",&n);
printf("请输入此数组的每个数大小\n");
for( i=0;i<n;i++)
scanf("%lf",&v[i]);
printf("请输入要求最接近的数\n");
scanf("%lf",&j);
printf("此数组中最接近所要求的数是:%lf\n",total(n,j));
return 0;
}