例子1
已知有一批货物,有各种不同的型号:单价分别是:1336;975,800,482,647,307,742,
472,每种型号若干台之后,总数是33605元。
请问如何得知这批货物各多少台,可以对应上33605这个总数?例子2
我要开出来一个总金额为5万的发票,明细的型号单价有:235,500,300,822,523
,447,285等这种价格,每种型号多少数量,总数刚好对成5万就OK数量上分布要比较平均请问此类题目是什么类型的问题,对应的是什么算法呢.
已知有一批货物,有各种不同的型号:单价分别是:1336;975,800,482,647,307,742,
472,每种型号若干台之后,总数是33605元。
请问如何得知这批货物各多少台,可以对应上33605这个总数?例子2
我要开出来一个总金额为5万的发票,明细的型号单价有:235,500,300,822,523
,447,285等这种价格,每种型号多少数量,总数刚好对成5万就OK数量上分布要比较平均请问此类题目是什么类型的问题,对应的是什么算法呢.
307单价15个,742单价20个,472单价30个。
307*15+742*20+472*30=33605第二个例子的答案还可以是
523单价2个,447单价77个,285单价51个。
523*2+447*77+285*51=50000用穷举能算出来。我写的循环如下,但是这个没法均匀分布,一有结果就结算计算了。
不知道有没有更好的方法
int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0;
bool state = false;
for (int i = 0; i <= 33605 / 1336; i++)
{
a = i;
Console.WriteLine("a={0}", a);
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
else
{
#region
for (int j = 0; j <= (33605 - a * 1336) / 975; j++)
{
b = j;
Console.WriteLine("b={0}", b);
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
else
{
#region
for (int k = 0; k <= (33605 - a * 1336 - b * 975) / 800; k++)
{
c = k;
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
else
{
#region
for (int l = 0; l <= (33605 - a * 1336 - b * 975 - c * 800) / 482; l++)
{
d = l;
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
else
{
#region
for (int m = 0; m <= (33605 - a * 1336 - b * 975 - c * 800 - d * 482) / 647; m++)
{
e = m;
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
else
{
#region
for (int n = 0; n <= (33605 - a * 1336 - b * 975 - c * 800 - d * 482 - e * 647) / 307; n++)
{
f = n;
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
else
{
#region
for (int o = 0; o <= (33605 - a * 1336 - b * 975 - c * 800 - d * 482 - e * 647 - f * 307) / 742; o++)
{
g = o;
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
else
{
for (int p = 0; p <= (33605 - a * 1336 - b * 975 - c * 800 - d * 482 - e * 647 - f * 307 - g * 742) / 472; p++)
{
h = p;
if (a * 1336 + b * 975 + c * 800 + d * 482 + e * 647 + f * 307 + g * 742 + h * 472 == 33605)
{
state = true;
break;
}
}
}
if (state == true)
{
break;
}
}
#endregion
}
if (state == true)
{
break;
}
}
#endregion
}
if (state == true)
{
break;
}
}
#endregion
}
if (state == true)
{
break;
}
}
#endregion
}
if (state == true)
{
break;
}
}
#endregion
}
if (state == true)
{
break;
}
}
#endregion
}
if (state == true)
{
break;
}
}
if (state == true)
{
Console.WriteLine("has get the result");
Console.WriteLine("{0}*1336+{1}*975+{2}*800+{3}*482+{4}*647+{5}*307+{6}*742+{7}*472=33605", a, b, c, d, e, f, g, h);
}
else
{
Console.WriteLine("no result");
}
Console.ReadLine();