求一个编程答案,编程高手请进.
目前我有一组数据如下a=16,129.36b=1,490.00c=116,168.54d=136,156.22e=357,254.88f=3,337.57g=300.00...
目前我有一组数据如下
a= 16,129.36
b= 1,490.00
c= 116,168.54
d= 136,156.22
e= 357,254.88
f= 3,337.57
g= 300.00
h= 2,683.16
i= 144,337.00
j= 379,378.92
k= 14,679.00
l= 756,102.62
m= 15,233,840.16
n= 67,828.90
已知一个结果x= 1,397,320.30 ,这个结果是从以上数据中提取的几个数相加的结果.所以现在领导要求我编个程序,找出这几个数据.
如果我手工计算,要穷举很长时间.
请老师帮忙做个程序,最好能在SQL中实现,如果SQL中不能,也可以用其他方法.
谢谢.
3楼的老师能说具体点吗?
规划求解我不是太懂. 展开
a= 16,129.36
b= 1,490.00
c= 116,168.54
d= 136,156.22
e= 357,254.88
f= 3,337.57
g= 300.00
h= 2,683.16
i= 144,337.00
j= 379,378.92
k= 14,679.00
l= 756,102.62
m= 15,233,840.16
n= 67,828.90
已知一个结果x= 1,397,320.30 ,这个结果是从以上数据中提取的几个数相加的结果.所以现在领导要求我编个程序,找出这几个数据.
如果我手工计算,要穷举很长时间.
请老师帮忙做个程序,最好能在SQL中实现,如果SQL中不能,也可以用其他方法.
谢谢.
3楼的老师能说具体点吗?
规划求解我不是太懂. 展开
展开全部
用EXECL的规划求解功能试试
算了,EXECL我也不熟,还是用编程来解决吧
原理很简单,这组数据有14个,我用数组a存储,再设一个长度为14的数组b,b的元素取0或1,表示对应的a中元素是否取到.这样的话,如果b[0],b[2],b[5]为1,则表示取了a中的第1,3,6个数.这时,用compute函数来计算a[0]*b[0]+a[1]*b[1]+......+a[13]*b[13],看结果是否为x即可.
因此,只要对b穷举,让其取遍0,1值即可.
另外,程序应该没问题,我选了几个数试了下,可以算出结果,但你给出的数算不出.
#include<stdio.h>
#include<math.h>
#define N 14
#define ANSWER 1397320.30
double a[N]={16129.36,1490.00,116168.54,136156.22,357254.88,3337.57,300.00,2683.16,144337.00,379378.92,14679.00,756102.62,15233840.16,67828.90};
int b[N];
bool compute()
{
double s=0;
for(int i=0;i<N;i++)
s+=a[i]*b[i];
if(fabs(s-ANSWER)<0.00001)
return true;
return false;
}
void f(int n)
{
if(n>=N)
{
if(compute())
{
for(int i=0;i<N;i++)
if(b[i])
printf("%f ",a[i]);
printf("\n");
}
}
else if(n>=0)
{
b[n]=0;
f(n+1);
b[n]=1;
f(n+1);
}
}
void main()
{
f(0);
}
算了,EXECL我也不熟,还是用编程来解决吧
原理很简单,这组数据有14个,我用数组a存储,再设一个长度为14的数组b,b的元素取0或1,表示对应的a中元素是否取到.这样的话,如果b[0],b[2],b[5]为1,则表示取了a中的第1,3,6个数.这时,用compute函数来计算a[0]*b[0]+a[1]*b[1]+......+a[13]*b[13],看结果是否为x即可.
因此,只要对b穷举,让其取遍0,1值即可.
另外,程序应该没问题,我选了几个数试了下,可以算出结果,但你给出的数算不出.
#include<stdio.h>
#include<math.h>
#define N 14
#define ANSWER 1397320.30
double a[N]={16129.36,1490.00,116168.54,136156.22,357254.88,3337.57,300.00,2683.16,144337.00,379378.92,14679.00,756102.62,15233840.16,67828.90};
int b[N];
bool compute()
{
double s=0;
for(int i=0;i<N;i++)
s+=a[i]*b[i];
if(fabs(s-ANSWER)<0.00001)
return true;
return false;
}
void f(int n)
{
if(n>=N)
{
if(compute())
{
for(int i=0;i<N;i++)
if(b[i])
printf("%f ",a[i]);
printf("\n");
}
}
else if(n>=0)
{
b[n]=0;
f(n+1);
b[n]=1;
f(n+1);
}
}
void main()
{
f(0);
}
展开全部
一共14个数,用排列组合,任意几个数做和,然后保存计算式子和结果比如:a+b+c=x,结果也是一共集合,然后你领导给你说,你去你保存的结果中匹配就行了,其实还是个穷举的方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请看我的答案,这个是我自己写的。这样做可以吗??
请老师指点.
穷举法.
#include<stdio.h>
void main()
{
float a[14];
int rusult;
int i,j,k,l,m,n,s,t,u,v;
float result;
printf("请输入这14个数\n");
for(i=0;i<14;i++)
{
scanf("%d",&a[i]);
printf("\n");
}
i=0;
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
result=a[i]+a[j];
if(result==1,397,320.30 )
printf(%d,%d,'a[i]','a[j]')
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
result=a[i]+a[j]+a[k];
if(result==1,397,320.30 )
printf(%d,%d,%d,'a[i]','a[j]','a[k]');
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
result=a[i]+a[j]+a[k]+a[l];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]');
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]');
}
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
for(n=m+1;n<14;n++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m]+a[n];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]',a[n]);
}
}
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
for(n=m+1;n<14;n++)
{
for(s=n+1;s<14;s++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m]+a[n]+a[s];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]','a[n]','a[s]');
}
}
}
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
for(n=m+1;n<14;n++)
{
for(s=n+1;s<14;s++)
{
for(t=s+1;t<14;t++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m]+a[n]+a[s]+a[t];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]','a[n]','a[s]','a[t]');
}
}
}
}
}
}
}
}
end
}
请老师指点.
穷举法.
#include<stdio.h>
void main()
{
float a[14];
int rusult;
int i,j,k,l,m,n,s,t,u,v;
float result;
printf("请输入这14个数\n");
for(i=0;i<14;i++)
{
scanf("%d",&a[i]);
printf("\n");
}
i=0;
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
result=a[i]+a[j];
if(result==1,397,320.30 )
printf(%d,%d,'a[i]','a[j]')
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
result=a[i]+a[j]+a[k];
if(result==1,397,320.30 )
printf(%d,%d,%d,'a[i]','a[j]','a[k]');
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
result=a[i]+a[j]+a[k]+a[l];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]');
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]');
}
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
for(n=m+1;n<14;n++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m]+a[n];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]',a[n]);
}
}
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
for(n=m+1;n<14;n++)
{
for(s=n+1;s<14;s++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m]+a[n]+a[s];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]','a[n]','a[s]');
}
}
}
}
}
}
}
for(i=0;i<14;i++)
{
for(j=i+1;j<14;j++)
{
for(k=j+1;k<14;k++)
{
for(l=k+1;l<14;l++)
{
for(m=l+1;m<14;m++)
{
for(n=m+1;n<14;n++)
{
for(s=n+1;s<14;s++)
{
for(t=s+1;t<14;t++)
{
result=a[i]+a[j]+a[k]+a[l]+a[m]+a[n]+a[s]+a[t];
if(result==1,397,320.30 )
printf(%d,%d,%d,%d,%d,%d,%d,%d,'a[i]','a[j]','a[k]','a[l]','a[m]','a[n]','a[s]','a[t]');
}
}
}
}
}
}
}
}
end
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询