问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在一堆数字中找出几个数,这几个数的和能够相加得一个固定值

发布网友 发布时间:2022-04-28 22:30

我来回答

4个回答

热心网友 时间:2023-09-19 03:13

In[6]:= a = {1161, 2538, 4480, 5925, 12166, 12693, 14279, 15507,
24624, 28844, 38946, 45114, 47222, 55747, 63859, 68862, 74672,
89170, 97914, 102866, 103821, 115338, 163487,
276068}; mb = 487235; aa =
Table[ToExpression[StringJoin["a", ToString[i]]], {i, 1, Length[a]}];
bb = a.aa; t =
Solve[Flatten[{Total[bb] == mb, Map[{# >= 0, # <= 1} &, aa]}], aa,
Integers]; Length[t]
aa /. t
Out[7]= 16
Out[8]= {{0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 1}, {0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1,
1, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0,
0, 0, 1, 0, 0, 0, 1, 0}, {0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,
1, 1, 0, 1, 0, 1, 1, 0, 0, 0}, {0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1,
0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0}, {1, 0, 0, 0, 1, 0, 0, 1, 1, 1,
0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0,
0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, {1, 0, 0, 1, 1, 0,
0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0}, {1, 0, 1, 0,
0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0}, {1, 0,
1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
0}, {1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0,
0, 0, 0}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0,
0, 1, 0, 0, 0}, {1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0,
1, 1, 0, 1, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
1, 0, 0, 0, 1, 1, 1, 0, 0}, {1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0,
0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0}, {1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0}}
用Mathematica解出来有16组解,如果是4张,那就是第一个解。运算过程中我把数据全放大了100倍,用整数来运算。

热心网友 时间:2023-09-19 03:14

遍历即可,我用matlab编的简单程序,其他语言类似

A=[11.61,25.38,44.8,59.25, 121.66,126.93 ,142.79,155.07,246.24,288.44,389.46,451.14,472.22,557.47,638.59,688.62,746.72,891.7,979.14,1028.66,1038.21,1153.38,1634.87,2760.68];
n=length(A); %求A中元素的个数
for i=1:n-3
for j=i+1:n-2
for k=j+1:n-1
for l=k+1:n
if A(i)+A(j)+A(k)+A(l)==4872.35 %判断条件
[A(i) A(j) A(k) A(l)]
end
end
end
end
end

我这里预设的和是4872.35
程序运行的结果是44.8、1028.66、1038.21、2760.68
你要的和无解

热心网友 时间:2023-09-19 03:14

C++版代码如下,做了一点拓展,可以求出通解
#include<iostream>
#include<cstdio>
using namespace std;
double a[1000], b[1000], c[1000];
double x ;
int n,m ;

void f(int i, int l){
if(i > n || l > m)return;
b[l] = a[i];
c[l] = i ;

if(l == m){
double sum = 0;
for(int k = 1; k <= m; k++)sum += b[k];

if(sum == x){
for(int k = 1 ; k <= m ; k++){
cout << b[k];
if(k < m)cout << " + ";
}
cout << " = " << x << endl << "这是";
for(int k = 1 ; k <= m ; k++){
cout << "第 " << c[k] << " 个数" ;
if(k < m)cout << "、";
}
cout << "相加。" << endl;
}
}

else{for(int y = i + 1; y <= n - m + l + 1 ; y ++)f(y, l+1);}

return;
}

int main(){
cout << "请输入数字个数(完成后回车):";
cin >> n;

cout << "请输入这"<<n<<"个数,每输入一个间隔一个空格(所有数字都输入完成后回车):\n" ;
for(int i = 1; i <= n ; i++)cin >> a[i];

cout <<"请输入需要选出多少个数相加(完成后回车)\n";
cout <<"(若需要的是选出任意个数的,请输入0然后回车):\n";
cin >> m ;

cout << "请输入所需得到的固定值(完成后回车):" ;
cin >> x ;

if(m == 0){
for(m = 1; m <= n; m++){
cout << "\n选出" << m << "个数相加,所得到的组合有:\n";
for(int i = 1; i <= n-m+1; i++)f(i,1);
}
}

else{
cout << "\n选出" << m << "个数相加,所得到的组合有:\n";
for(int i = 1; i <= n-m+1; i++)f(i,1);
}

return 0;
}

热心网友 时间:2023-09-19 03:15

你要的和不存在,。java版如下:

public class test {

public static void main(String[] args) {
Double[] d={11.61,25.38,44.8,59.25,121.66,126.93,142.79,155.07,246.24,288.44,389.46,451.14,472.22,557.47,638.59,688.62,746.72 , 891.7,979.14,1028.66,1038.21,1153.38,1634.87,2760.68};

double s=0.0;
int count=0;
double a=5560.54;
for(int i=0;i<24;i++) {
for(int j=1;j<24;j++) {
for(int x=2;x<24;x++) {
for(int y=3;y<24;y++) {
s=d[i]+d[j]+d[x]+d[y];

if(s==a){

System.out.print(d[i]+",");
System.out.print(d[j]+",");
System.out.print(d[x]+",");
System.out.println(d[y]);
System.out.println("------");

}
count=count+1;

}
}
}
}
System.out.println(count);
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
弹钢琴时手指速度总是不自觉变快怎么办? 弹钢琴时速度总是不自觉变快怎么办? 微信发表情包上限是多少 ...8.0.3版本更新什么?微信表情包上限变成999是什么 成人毛线斗篷式开襟披肩编织 江苏洛社商贸城项目有哪些主要特点和设施? 永明镇的乡镇建设 蓝光花满庭小区基本信息 洛社商贸城项目概括 怀孕了能不能吃汤圆 治便秘的方法 靠按摩能管用么 我的电脑总是出现这个! 治疗便秘的好方法 硬盘有坏道了怎么隔过去呀? X-MAN反转剧《特别的爱》里的全丽媛是哪个韩国艺人? 治疗便秘的按摩方法 EXCEL2007中,公式等于:=$a*b 锁定A ; B递增,如何设置啊。 我这么设置了,没用 68862是什么电话 宠物实习生?宠物医院的实习生,是什么工作,待遇怎样 宠物医院的整体就业趋势? 宠物医院工作好吗 在宠物医院上班发展潜力大不大? 在宠物医院里学习,有上进心的,一般需要多少时间出师 ...一个中专毕业生,我特别喜欢小动物,想学兽医,然后开一家宠物医... 关于在宠物医院工作的问题 动物医学,动物医学,真是揪心啊!到底好不好? 在宠物医院实习要具备什么样的知识? 我在一家宠物医院实习,实习了2个月左右,没有签合同,对我以后也没有什 ... 到宠物医院实习都需要干些什么? 我在宠物医院实习 《孤独之旅》的时代背景 怎么治便秘?食疗和按摩的方法 s60三版系统 破解了吗? 歌词中有(如果全世界不爱你)的歌叫什么名字啊 订购联通的视频彩铃后怎样设置? 为什么我的电脑cup占用量很大? 有哪些可以缓解便秘的小妙招? CF江苏一区,比赛队。有的说YY 腹部按摩、马桶操、早起一杯水…朋友间流传的通便妙招,有用吗? 谁有夏娜罗嗦罗嗦..的音频,我想短信做铃声 宝宝严重便秘小妙招快速拉 insomnia 厉旭CD版的有么 发我 xu_can68862@qq.com 《巫师3》steam没有简体中文怎么弄? 0x6605bd9b指令用的0x4sb9e3a8不能为read 0x004052b8指令引用的0x00000d48内存不能为written 巫师3如何调中文 哎,我是电脑初学者啊! 请问内存不能有Written是什么意思呢? 这是开电影的 是不是视频播发器的问题呢 最终幻想8中文版 《巫师》3没有简体中文吗? 目前全国有多少个人有微粒贷