在5个数中选几个数,使这几个数的和<400

来源:百度知道 编辑:UC知道 时间:2024/05/29 14:09:11
随意输入5个数,在这5个数中选择任意几个数(可以是5个,也可以是1个)
这几个数的和不大于400,且在小于400的组合中,这个组合的和是最大的.
如:
100 300 50 40 20 结果为:300+50+40=390 最接近且不超过400
1 2 3 4 390 结果为:390+4+3+2=399 最接近且不超过400
401 402 403 404 1 结果为:1 最接近且不超过400
谁能做一个...
谢了.
求代码求思路

这个我调试过了,没错的。楼上的我调试你的程序了,考虑不全面,当5个数全大于400时,就不会提示没结果,且输出错误的组合。
#include<stdio.h>
main()
{ int i,j,t,a[5],sum=0,index[5],k=0;
printf("请输入5个数:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++) //现对数组排序,从大到小
for(j=i+1;j<5;j++)
if(a[i]<a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
if(a[4]>=400) printf("不存在这种组合\n");//如果最小数字大于400,则不存在组合。
else{
j=0;
for(i=0;i<5;i++)
if(a[i]<400) {j=i;index[k++]=i;break;}
else continue;
sum=a[j];
for(i=j+1;i<5;i++)
{ sum+=a[i];
if(sum<400) index[k++]=i;
else {sum-=a[i];continue;}
}
printf("结果为:\n");
for(i=0;i<k-1;i++)
printf("%d+",a[index[i]]);
printf("%d=",a[index[i]]);
sum=0;
for(i=0;i<k;i++)
sum+=a[index[i]];
printf("%d\n&quo

在1.2.3...1997中选一些数,使这些数中每2个数的和能被26整除,这样的数最多能选几个? 在1到1997中选出一些数,使得这些数中的每两个数的和都能被26整除,那么这样的数最多能选几个? 从1-10这10个数中,任取几个数,才能保证这些数中一定能找到两个数,使其中的一个数是另一个数的倍数? 如果有10个数,从其中选5个数,不重复的选有几种选法的组合数? 在1---200着200个数中,与678相加不进位的数有几个? 根据前几个数的规律推出下个数 给你几个数,然后推论出下个数! 输入5个数,输出最大数和最小数,有简单点的方法吗?多写几个看看,谢谢 找这几个数规律 从0,3,5,7四个数中任意选出3个数,排成同时是2,3,5倍数的数,这样的数一共有几个?分