C# 四个字母生成4组3位不同组合,并且不能有重复
生成的每组的字符都不能有同时出现过,如a,b,c,d,只能生成abc,abd,acd,bcd,有没有算法,我是C#初学者,同样如果是5个字母生成3位不同组合呢?谢谢!!!...
生成的每组的字符都不能有同时出现过,如 a,b,c,d ,只能生成 abc,abd,acd,bcd,有没有算法,我是C#初学者,同样如果是5个字母生成3位不同组合呢?谢谢!!!
展开
展开全部
static void Main(string[] args)
{
string str = Console.ReadLine(); // 此处接受的是全字符 比如 abcde 的形式
// 如果有间隔符或相同字符的话请自行处理
List<string> list = GetAssembly(str);
foreach (string s in list)
{
Console.WriteLine(s);
}
Console.ReadKey();
}
static List<string> GetAssembly(string str)
{
List<string> list = new List<string>();
for (int i = 0; i < str.Length - 2; ++i) // 从字符串第一位遍历到倒数第三位
{
for (int j = i + 1; j < str.Length - 1; ++j) // 从第一个字符的后一位遍历到字符串的倒数第二位
{
for (int k = j + 1; k < str.Length; ++k) // 从第二个字符的后一位遍历到字符串的最后一位
{
list.Add("" + str[i] + str[j] + str[k]);
}
}
}
return list;
}
展开全部
class Program
{
static void Main(string[] args)
{
List<char> lst = new List<char> { 'a', 'b', 'c', 'd' };
foreach (var comb in Combinations(lst, 0, 4, 3))
{
string r = new string(comb.Take(3).ToArray());
Console.WriteLine(r);
}
Console.ReadLine();
}
public static IEnumerable<List<char>> Combinations(
List<char> sq, int i0, int n, int c)
{
if (c == 0) yield return sq;
else
{
for (int i = 0; i < n; i++)
{
foreach (var perm in Combinations
(sq, i0 + 1, n - 1 - i, c - 1))
yield return perm;
RL(sq, i0, n);
}
}
}
private static void RL(List<char> sq, int i0, int n)
{
char tmp = sq[i0];
sq.RemoveAt(i0);
sq.Insert(i0 + n - 1, tmp);
}
}
//5位取3个
//List<char> lst = new List<char> { 'a', 'b', 'c', 'd', 'e' };
//foreach (var comb in Combinations(lst, 0, 5, 3))
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的回答已经很到位了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询