一组数据比如[5.5,7,3,8,34,5,1,2.2] ,求任意几个数的和,最接近但不超过50的算法,要能输出方案。
用递归来处理。
#include<bits/stdc++.h>
using namespace std;
int a[11];
int res,n;
void dfs(int k,int sum,int is)
{
if(sum<=50 and is) res = max(res,sum);
if(sum>50 or k==n+1) return;
dfs(k+1,sum,is);
dfs(k+1,sum+a[k],1);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
dfs(0,0,0);
cout<<res<<'\n';
return 0;
}
使用递归的方法写,暴力搜索,相当于每个元素都有两种计算情况,要么不加它,要么加它,对应两个dfs。
k代表当前的访问数的个数,sum为当前访问到数的总和,is记录是否有数有加的运算。
我只是把其中的数变为了整数,并让用户读入几个数据。你可以根据需要进行改动。
如果有什么不懂得可以私我。