如何生成具有特定元素和的数组?是否存在这样的算法?
我尝试这样的事情:
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string serial = "";
int chekSumBlockOne = 280;
int checkSumBlockOne_tmp = 0;
var blockOne = new char[4];
var random = new Random();
while (chekSumBlockOne != checkSumBlockOne_tmp)
{
checkSumBlockOne_tmp = 0;
for (int i = 0; i < blockOne.Length; i++)
{
blockOne[i] = chars[random.Next(chars.Length)];
}
foreach (char symbol in blockOne)
{
checkSumBlockOne_tmp += (int)symbol;
}
}
但是我的方法很慢。
就像其他评论一样,Random将不是一个更好的选择。我建议您从1(如果值的总和小于100
)迭代到Some,N
然后取每个级别中字符的All组合,然后将值与给定的总和进行比较。收到任何可能的字符串后,请中断循环。这是给你的一个例子:
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int chekSumBlockOne = 280;
List<string> possibleOutComes = new List<string>();
var qw = chars.Select(x => x.ToString());
int numberOfChars = 4;
for (int i = 0; i < numberOfChars; i++)
{
qw = qw.SelectMany(x => chars, (x, y) => x + y);
possibleOutComes = qw.Where(x => x.Sum(y => (int)y) == chekSumBlockOne).ToList();
if (possibleOutComes.Count > 0)
break;
}
在这种情况下,您将获得满足条件的24391个组合(字符串包含4个字符@ i = 3)。其中一些如下:
AAAU
AABT
AACS
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句