有一组不规则的数:1132、544、844、929、348、1136、1066,1197。现用规定的数6000来减它们,无论只减以这一组数中某一个数的本身还是减以这个数与其它数的组合,只要能得到的差是最少的(这个差最好小于100),就符合要求。
比如:
6000 - (1197*5) = 15
6000 - (1132*4+544*1+844*1) = 84
6000 - (929*6+348*1)= 78
6000 - (1136*4+544*1+844*1) = 68
6000 - (1066*4+844*2) = 48
6000 - (544*11) = 16
(注:1132*4表时有4个1132相加,即:1132+1132+1132+1332;544*1表时只有一个544)
不知我这样说够不够清楚。
比如:
6000 - (1197*5) = 15
6000 - (1132*4+544*1+844*1) = 84
6000 - (929*6+348*1)= 78
6000 - (1136*4+544*1+844*1) = 68
6000 - (1066*4+844*2) = 48
6000 - (544*11) = 16
(注:1132*4表时有4个1132相加,即:1132+1132+1132+1332;544*1表时只有一个544)
不知我这样说够不够清楚。
解决方案 »
- iis应用程序池最大进程数配置为2,页面出错!
- 解决所有事件都要触发一个方法
- C#实现gridview批量导入excel验证重复(急急急)
- ★支持定义输出界面、代码模板的.net代码生成器
- 新手求助
- sql server数据库中插入<img src='F:\virus alarm\bin\Debug\image\2006_09_18_155008xin.rar'> 出现错误
- datagridview保存数据到数据库遇到的更新异常问题
- datagrid控件问题,求助,
- 多媒体中控机编程
- 本人写的一个文件切割的小东东!
- 发一个程序,大家帮我看看,问题是“Web Service下使用NHibernate遇到的问题”
- 关于两个页面的DataSet互相传值问题-----在线等急!!!
int boss = 6000;
ArrayList list = new ArrayList();//全局变量
foreach(int i in intArr)
{
int j = 6000 - i;
if(j > 100)
{
this.goon(j);//goon 是一个函数 在下面有定义
}
else
{
if(j>0)
{list.Add(j);}
}
}
private void goon(int j)
{
foreach(int i in intArr)
{
j = j - i;
if(j>100)
{
this.goon(j);
}
else
{
if(j>0)
{list.Add(j);}
}
}
}
再问个超低级的问题,如果要照看“list”里的面的数据,要怎么做。
Console.WriteLine(list[i].ToString());
能再麻烦你一下吗?输出来的是结果是它最后计算出来的结果,我想要他输出来是整条公式,请问有怎么写呢?
比如这样:
6000 - (1197*5) = 15
6000 - (1132*4+544*1+844*1) = 84
6000 - (929*6+348*1)= 78
6000 - (1136*4+544*1+844*1) = 68
6000 - (1066*4+844*2) = 48
6000 - (544*11) = 16
超级的感谢。
不过我发现了还有两个问题没解决,第一,只能用一种源长度来算数组中所有长度的最优组合,就像我在CSDN问到的问题那样,用6000来算出所有的长度“1132,544,844,929,348,1136,1066,1197”的组合,而不应是只有一种。比如,上面的程序只算能出6000-(1197*5)=15是最优的,而这些:6000 - (1132*4+544*1+844*1) = 84 6000 - (929*6+348*1)= 78 6000 - (1136*4+544*1+844*1) = 68
6000 - (1066*4+844*2) = 48 6000 - (544*11) = 16 没有算出来,还有最优的限至应该是把余数限至在小于100的情况下。
还有一个更难的问题,如果把“1132,544,844,929,348,1136,1066,1197”看成一种型材(木材)长度,而每种长度都需要一定的数量,比如:1132*15、544*8、844*11、929*7、348*9、1136*3、1066*17、1197*9(注:“1132*15”的意思是1132的这种长度需要的数量是15根)。上面的算法是实现一种最优化的算法,那么在加上了这个数量限至后,当上面的算法在进行最优运算时,发现某种长度的数量在达到要求后就不再拿这种长度进行运算了,继而转向对其它数量还没有达的要求的长度进行计算。