如何在C#中执行排列和组合 [英] How to perform permutation and combination in C#
问题描述
所需数量:530
允许的缓冲区数量为:所需数量的-5%至+ 10%变为:
583 + 10%
503.5 -5%
BATCH |数量
B1 | 510
B2 | 500
B3 | 15
B4 | 12
B5 | 10
所以这里我想要的所有组合都介于503.5和之间。 583.
例如:510,510 + 15,510 + 15 + 12,510 + 15 + 12 + 10,510 + 12,510 + 12 + 10,510 + 10,500 + 15 ......等等。
请帮忙。上述示例的代码将受到高度赞赏。迫切需要。
我尝试了什么:
Required Quantity : 530
Buffer Qty allowed is : -5% to +10% of Required Qty which becomes :
583 for +10%
503.5 for -5%
BATCH | QTY
B1 | 510
B2 | 500
B3 | 15
B4 | 12
B5 | 10
So here i want all the combinations that fall between 503.5 & 583.
Eg : 510,510+15,510+15+12,510+15+12+10,510+12,510+12+10,510+10,500+15 ... etc and so on.
Please help. Code for the above example would be highly appreciated. In urgent need.
What I have tried:
foreach (DataRow row in ObjTempOfferDt.Rows)
{
DataRow dr = ObjOfferDt.NewRow();
dr["ProductId"] = row["ProductId"].ToString();
UpperLimit = ReqQnt + ReqQnt * Convert.ToDecimal(0.1);
LowerLimit = ReqQnt - ReqQnt * Convert.ToDecimal(0.05);
strQuantity = Convert.ToDecimal(row["Quantity"].ToString());
if (strQuantity <= ReqQnt && strQuantity != 0 && (strQuantity + Quantity) < UpperLimit)
{
Quantity = Quantity + Convert.ToDecimal(row["Quantity"].ToString());
}
else if (strQuantity == 0)
{
continue;
}
//Abrar for test
else if (Quantity > ReqQnt && Quantity < UpperLimit)
{
break;
}
else
{
continue;
}
if (ReqQnt == Quantity)
{
Pieces = Pieces + 1;
dr["OfferPercent"] = "0";
dr["Batch"] = row["Batch"].ToString();
dr["Quantity"] = row["Quantity"].ToString();
dr["TotalQuantity"] = Quantity;
dr["NoOfPiece"] = Pieces.ToString();
ObjOfferDt.Rows.Add(dr);
break;
}
else if (ReqQnt < Quantity && Quantity <= UpperLimit)
{
dr["OfferPercent"] = "10";
}
else if (ReqQnt < Quantity && Quantity > UpperLimit)
{
continue;
}
else if (ReqQnt > Quantity && Quantity >= LowerLimit)
{
dr["OfferPercent"] = "10";
}
else if (Quantity > ReqQnt && Quantity < UpperLimit)
{
Pieces = Pieces + 1;
dr["OfferPercent"] = "0";
dr["Batch"] = row["Batch"].ToString();
dr["Quantity"] = row["Quantity"].ToString();
dr["TotalQuantity"] = Quantity;
dr["NoOfPiece"] = Pieces.ToString();
ObjOfferDt.Rows.Add(dr);
break;
}
else
{
if (strQuantity == 0)
{
continue;
}
else if (strQuantity > UpperLimit)
{
continue;
}
else
{
Pieces = Pieces + 1;
dr["OfferPercent"] = "0";
dr["Batch"] = row["Batch"].ToString();
dr["Quantity"] = row["Quantity"].ToString();
dr["TotalQuantity"] = Quantity;
dr["NoOfPiece"] = Pieces.ToString();
ObjOfferDt.Rows.Add(dr);
continue;
}
}
dr["Batch"] = row["Batch"].ToString();
dr["Quantity"] = row["Quantity"].ToString();
dr["TotalQuantity"] = Quantity;
Pieces = Pieces + 1;
dr["NoOfPiece"] = Pieces.ToString();
ObjOfferDt.Rows.Add(dr);
}
这只是带来第一个满意的数量而不是组合of qty。
This just brings the first satisfied qty not a combination of qty.
推荐答案
我建议你
I suggest you to
- Use arrays to hold meaningful quantities in order to simplify the code appearence
- Try to solve the problem with a recursive approach (see, for instance: Recursive methods using C#[^])
这篇关于如何在C#中执行排列和组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!