c# 排列 组合-C# 排列 组合问题,a,b两个字符要生成 n个字符长度的所有排列

问题描述

C# 排列 组合问题,a,b两个字符要生成 n个字符长度的所有排列

请教
两个字符 a,b
生成 n个字符长度的 排列 怎么实现 ,要得到所有的排列
比如 n=5 ,n可以自己定义
比如 "ababa" , aabba, bbaab,........
用代码怎么实现,得到n长度下的所有排列

解决方案

 using System;
using System.Collections.Generic;
using System.Linq;

public class Test
{
    static IEnumerable<string> foo(IEnumerable<string> src, string meta, int n)
    {
        if (src.First().Length == n)
            return src;
        else
            return foo(meta.SelectMany(x => src.Select(y => y + x)), meta, n);
    }
    public static void Main()
    {
        // your code goes here
        foreach (string s in foo("ab".Select(x => x.ToString()), "ab", 5))
            Console.WriteLine(s);
    }
}

aaaaa
baaaa
abaaa
bbaaa
aabaa
babaa
abbaa
bbbaa
aaaba
baaba
ababa
bbaba
aabba
babba
abbba
bbbba
aaaab
baaab
abaab
bbaab
aabab
babab
abbab
bbbab
aaabb
baabb
ababb
bbabb
aabbb
babbb
abbbb
bbbbb

解决方案二:

http://ideone.com/3JYUzL

解决方案三:

有的人故弄玄虚瞎回答,回答的内容比我的程序都长,也是醉了。

解决方案四:

就像5位数的二进制一样,00000-11111分别用a,b替换其中的0,1。

       public  static string Zuhe(int n)
        {
            string str = null;
            string temp = null;
            for (int i = 0; i <= Math.Pow(2, n) - 1; i++)
            {
                str = Convert.ToString(i, 2);  //转化为2进制
                str = int.Parse(str).ToString().PadRight(5, '0');
                temp += str+Environment.NewLine;
            }
            str= temp.Replace("0", "a");
            str= str.Replace("1", "b");
            return str;
        }

解决方案五:

如果用数学方法计算出结果,可能要好多步,如果简单算可能性,应该是 2*2*2*2*2,如果n=2,就是2的二次方,4个,ab,aa,bb.ba
如果一定要用2个字符,那么公式就是2^n-2,减2因为,都是a或者都是b两种可能性。

然后就用递归啊,初始 a a a a a 然后循环,把第一位换成b,也就是 b a a a a a,然后两两交换顺序,把这其中每次交换的结果用数组保留下来(添加到key-value,如果不存在则添加),然后搞2ge
b,然后再用排序法不停交换。。。。。

解决方案六:

两个字母 就相当于二进制 0 1,这样就可以考虑使用二叉树,来遍历了。构造一颗深度为 5 的二叉树,遍历就可以了。

解决方案七:

蓝桥杯 N个字符全排列
n个字符的全排列

时间: 2024-11-05 17:25:56

c# 排列 组合-C# 排列 组合问题,a,b两个字符要生成 n个字符长度的所有排列的相关文章

word2007组合或取消组合形状或对象

  组合形状或对象概述 为了加快工作速度,您可以组合形状.图片或其他对象 (对象:表.图表.图形.等号或其他形式的信息.例如,在一个应用程序中创建的对象,如果链接或嵌入另一个程序中,就是 OLE 对象.).通过组合,您可以同时翻转.旋转.移动所有形状或对象,或者同时调整它们的大小,就好像它们是一个形状或对象一样.您还可以同时更改组合 (组合:对象的集合,在对其中的对象进行移动.调整大小或旋转时,这些对象表现为一个整体.一个组合可由多个组组成.)中所有形状的属性 (属性:可用绘图工具和菜单命令操作

c语言-输入N个两个字母组成的字符串,将他们按字典序排列(利用C语言解答)

问题描述 输入N个两个字母组成的字符串,将他们按字典序排列(利用C语言解答) 如:输入:ab jh ac aa bn输出:aa ab ac bn jh 解决方案 这个也是http://zhidao.baidu.com/question/306550706.html?qbl=relate_question_2&word=%CA%E4%C8%EB%D7%D6%B7%FB%B4%AE%2C%BD%AB%CB%FB%C3%C7%B0%B4%D7%D6%B5%E4%D0%F2%C5%C5%C1%D0 解决

java随机生成字符串(字符随机生成类 生成随机字符组合)_java

复制代码 代码如下: package com.phyl.password; import java.util.ArrayList;import java.util.Arrays;import java.util.Random;/** * 字符随机生成类 * @author ASUS * */public class PassWord {  /**  * 密码类型枚举  * @author ASUS  */ public static enum TYPE {  /**   * 字符型   */  

字符 生成-简单的字符生成器-排列组合

问题描述 简单的字符生成器-排列组合 想要实现以下图片上的功能,上方选中我需要用的字母.数字,输入我需要生成的位数,最终列出所有的排列组合数据.求人帮忙,万分感谢. 解决方案 关键就是算法http://bbs.bccn.net/thread-347026-1-1.htmlhttp://outofmemory.cn/code-snippet/4237/c-pailie-zuhe-suanfa 解决方案二: 楼上说的对,关键就是排列组合的算法.最近做了有关排列组合的东西,代码是JAVA的,你是用什么

分组 排列-从数据库读取数据,到模板输出时按照字段catname的首字母顺序进行分组排列怎么实现?

问题描述 从数据库读取数据,到模板输出时按照字段catname的首字母顺序进行分组排列怎么实现? 如: A-E 阿伟点金 曹氏点金 曹向阳 F-J 何昆宗 海啸 黄建超 韩烨 金界传奇 K-O 刘宁波 刘云灵 李兴淼 李生论 零点拓 P-T 乔振华 孙建发 石勇 U-Z 吴量 沃伦点 小张论金

itext生成的pdf,怎么把横向排列的选择题,改为纵向排列的

问题描述 privatevoidobjectiveItem(CardTypecardType){floatyPos=gPosY-3f;floatxPos=gPosX;logger.debug("enterobjectiveItemmothed,gPosYis"+gPosY+"gPosXis"+gPosX);//客观题外框Stringtitle="选择题";intquestionCount=90;//试题数量//第一卷canvas.beginTex

递归枚举排列、组合的C#源码

递归 大约是2001年时候用VS7 beta写的一点东西了,现在回看起来不是一般的幼稚...好处是还能运行:),看到CSDN上有朋友要C# 的代码,我也不揣简陋,献丑了.(转换成VS03的工程了)  Combinatorics.cs代码清单 using System;using System.Collections;using System.Data;      /// <summary>     /// 组合数学函数集     /// </summary>     public 

使用F#的排列与组合

理解排列与组合是进行软件测试所需的一项基本技能.在本月的"测试运行"专栏中,我将向您展示如何使用以新 F# 语言编写的代码来处理排列与组合. 数学组合是指从包含 n 项的集合中选择 k 项作为子集,不考虑其中的顺序.例如,如果 n = 5 且 k = 2,需要从五项中选择二项,则所有可能的组合为: {0,1}, {0,2}, {0,3}, {0,4}, {1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4} 请注意,我没有列出组合 {1,0},这是因为它与 {

javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号

 具体题目是这样的: 从1--9中选取N个数字,组成不重复的N位数,从小到大进行编号,当输入其中任何一个数M时,能找出该数字对应 的编号.如 N=3,M=213. 输出:[123(1) , 132(2) , 213(3) , 231(4) , 312(5) , 321(6)]--->X=2 首先看到题目想到的是生成一个从少到大的全排列的数组,然后再遍历数组得到对应的序号(数组下标加1),又或者想到一个个从小到大的生成push进数组,然后判断该数是不是当前题目给的数,如果是的话要求的序号就是当前数