长风洪 2016-08-18 01:47 采纳率: 100%
浏览 1345
已采纳

C#中给定数组元素的组合算法?

如何由A-Z,a-z,0-9等62个元素组成一个16位的字符串,要求相邻两位不能相同,且一个元素最多只能出现两次,而且出现两次的元素个数最多只能两个,请问这个算法要如何来写?

  • 写回答

4条回答 默认 最新

  • Anne_liusha 2016-08-19 03:29
    关注

    List result = new List(); //保存所有的可能字符 最终要的数据

    List nunm = new List();//保存保存每一次可能字符数组形式

    public void Index() //启动方法
    {
    List E = new List();
    List e = new List();
    int start = 65;
    int end = 90;
    while (start <= end) {
    E.Add(((char)start).ToString());
    e.Add(((char)start).ToString().ToLower());
    start++;
    }
    List nums = new List();
    for (int i = 1; i <= 9; i++) {
    nums.Add(i.ToString());
    }

            for (int i = 0; i < E.Count; i++) {
                nunm.Add(E[i]);
                functo(nunm);
                for (int j = 0; j < e.Count; j++)
                {
                    nunm.Add(e[j]);
                    functo(nunm);
                    for (int k = 0; k < nums.Count; k++)
                    {
                        nunm.Add(nums[k]);
                        functo(nunm);
    
                    }
                }
            }
        }
                  public void functo(List<string> nunm) {
            int count = 0;
            for (int a = 0; a < nunm.Count - 1; a++)
            {
    
                //相邻不相同
                if (nunm[a] == nunm[a + 1])
                {
                    nunm.RemoveAt(nunm.Count - 1);
                    break;
                }
    
                for (int b = a + 1; b < nunm.Count; b++)
                {
                    int silcount = 0;
    
                    if (String.Compare(nunm[a], nunm[b]) == 0)
                    {
                        silcount++;
                    }
                    if (silcount > 3)
                    {
                        nunm.RemoveAt(nunm.Count - 1);
                        return;
                    }
    
                    if (silcount > 0)
                    {
                        count++;
                    }
    
                    if (count > 2) {
                        count = 0;
                        nunm.RemoveAt(nunm.Count - 1);
                        // nunm.Remove(nunm[nunm.Count - 1]);
                        return;
                    }
                }
            }
            if (nunm.Count == 16)
            {
                string aa = "";
                foreach (var item in nunm)
                {
                    aa += item;
                }
                result.Add(aa);
                nunm.RemoveAt(nunm.Count - 1);
                return;
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘