扩展一下 static void Main(string[] args) { var a = "abcd"; var b = "+-*/"; var buf = new StringBuilder(); for (var i = 0; i < Math.Pow(b.Length,a.Length-1); i++) { var mask = BaseCconvert(i, b.Length).PadLeft(a.Length - 1, '0'); //Console.WriteLine(mask); for (var j = 0; j < a.Length; j++) { buf.Append(a[j]); if (j < mask.Length) buf.Append(b[mask[j]-'0']); } Console.WriteLine(buf.ToString()); buf.Clear(); } } static string BaseCconvert(int number, int tobase) { return BaseCconvert(number.ToString(), 10, tobase); }
static string BaseCconvert(string number, int frombase, int tobase) { var dict = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; number = number.ToUpper(); Int64 tmp = 0; foreach (var c in number.ToUpper()) tmp = tmp * frombase + dict.IndexOf(c); var res = new List<char>(); while (tmp > 0) { var mod = tmp % tobase; tmp = tmp / tobase; res.Insert(0, dict[(int)mod]); } return new string(res.ToArray()); }
ac/b 是哪来的?
如果考虑全排列,那至少还有 bca、bc/a、b/ca b/c/a 没考虑到
如果不是全排列,那只有4种 static void Main(string[] args)
{
var a = "abc";
var b = "/\0";
var buf = new StringBuilder();
for (var i = 0; i <= a.Length; i++)
{
var mask = Convert.ToString(i, 2).PadLeft(a.Length - 1, '0');
for (var j = 0; j < a.Length; j++)
{
buf.Append(a[j]);
if (j < mask.Length) buf.Append(b[mask[j]-'0']);
}
Console.WriteLine(buf.ToString());
buf.Clear();
}
}
打个比方就是三个人 可以两个人一组 三个人一组或者一个人一组 求有会组成几种不同的组合。
{
var a = "abcd";
var b = "+-*/";
var buf = new StringBuilder();
for (var i = 0; i < Math.Pow(b.Length,a.Length-1); i++)
{
var mask = BaseCconvert(i, b.Length).PadLeft(a.Length - 1, '0');
//Console.WriteLine(mask);
for (var j = 0; j < a.Length; j++)
{
buf.Append(a[j]);
if (j < mask.Length) buf.Append(b[mask[j]-'0']);
}
Console.WriteLine(buf.ToString());
buf.Clear();
}
}
static string BaseCconvert(int number, int tobase)
{
return BaseCconvert(number.ToString(), 10, tobase);
}
static string BaseCconvert(string number, int frombase, int tobase)
{
var dict = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
number = number.ToUpper();
Int64 tmp = 0;
foreach (var c in number.ToUpper()) tmp = tmp * frombase + dict.IndexOf(c);
var res = new List<char>();
while (tmp > 0)
{
var mod = tmp % tobase;
tmp = tmp / tobase;
res.Insert(0, dict[(int)mod]);
}
return new string(res.ToArray());
}