如何实现一个字符数组中固定长度的字符组合

Y御剑逍遥Y 2020-08-14 06:42:11
例如 我有一个字符数组 totalTest={"0","1","2","3"..........."?","/".....共94个,也可以选择其中部分,最多94个}
然后做个函数 ProA(密码长度)
最后能够按密码长度设定,枚举全部字符组合,如:密码长度5,则枚举后如下:
00000
00001
00002
00003
00004
00005
00006
00007
00008
00009
0000a
0000b
..........
00010
..........
0001?
..........
请高手不吝赐教 谢谢
...全文
2935 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
清风不拂面 2020-08-16
  • 打赏
  • 举报
回复
建议用字符串数组完成 如果密码长度小于指定长度就在前面添加0 intL=strA.length if intL<5 then for intI=1 to 5-intL strA="0" & strA next end if
wanghui0380 2020-08-16
  • 打赏
  • 举报
回复
我不想废脑筋打造完美写法,就简单演示一下,不过我也不想弄纯函数式。直接用对象式模拟了
 testxx f1 = new testxx(0);
            testxx f2 = new testxx(0);
            testxx f3=new testxx(0);
            testxx f4=new testxx(0);
            testxx f5 = new testxx(0);
            
            f5.parent = f4;
            f4.parent = f3;
            f3.parent = f2;
            f2.parent = f1;
 
//这一串初始过程,可以用代码实现,只是简单演示,我懒得写那么完备          
            for (int i = 0; i < 100; i++)
            {
                var res = f5.computeEx();
                Console.WriteLine(string.Join(",",res));
            }
------------------------- 对象
public class testxx
    {
        public testxx parent { get; set; }

       public int value
        {
            get;
            set;
        }

        public testxx(int init)
        {
            value = init;
         

        }

        public void compute()
        {
            value++;
            if (value == 94)
            {
                value -= 94;
                parent?.compute();
            }
        }

    }
扩展方法
   public static IEnumerable<int> computeEx(this testxx lst)
        {
            var obj = lst;


            var res = lst.ParentValue();
            foreach (var re in res)
            {
                yield return re;
            }

          
            obj.compute();
        }

        private static IEnumerable<int> ParentValue(this testxx obj)
        {
            if (obj.parent != null)
            {
                var b = obj.parent.ParentValue();
                foreach (var i in b)
                {
                    yield return i;
                }
            }
            yield return obj.value;
        }
wanghui0380 2020-08-16
  • 打赏
  • 举报
回复
暴破,如果把初始换成 [0-9]你会不会写。我相信你会的,那不就是数数么 ok,【0-9】你会写,那是10进制。换个条件,{"0","1","2","3"..........."?","/".....共94个 那不就是94进制么,满94进一位 当然94进制,5位的94进制是个很大数字,int,long可能无法表达。 我们可以换成函数式写法,这个我现在不太想写,只是提供思路。f(f1(f2(f3(f4(f5)))))

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧