当前位置:编程学习 > C#/ASP.NET >>

一个规则匹配的问题,求个思路,


            IList<string> _products = new List<string>();
            _products.Add("BBBBBB");
            _products.Add("AAAAAA");
            _products.Add("AAAAAA");
            _products.Add("BBBBBB");
            _products.Add("CCCCCCC");
            _products.Add("CCCCCCC");
            _products.Add("BBBBBB");
            _products.Add("BBBBBB");
            _products.Add("DDDDDD");
            _products.Add("DDDDDD");
            _products.Add("AAAAAA");


            IList<string> _rules = new List<string>();
            _rules.Add("AAAAAA");
            _rules.Add("BBBBBB");
            _rules.Add("CCCCCCC");
            //_products 产品
            //_rules 规则
            //找到批配规则组合的所有产品 组合 
            //规则中产品可以重复 想得到 这产品有多少组符合规则的

比如以上的 答案 就是 2 

求个思路,用哪种比较好?KMP么? 还是 KMP --------------------编程问答-------------------- 可以先放到一个dictioanry去,比如
"AAAAAA"  : 3
"BBBBBB"  : 4
"DDDDDD"  : 2
"CCCCCCC" : 2

这个就是类似货架,有货物名称和对应库存数量。
你的问题就变成了,给定一个组合,可以出库几组。
每出一组,A、B、C就各减一,直到任何一种货品没有库存为止。 --------------------编程问答-------------------- 答案为何是2?  --------------------编程问答-------------------- 用正则呗                       . --------------------编程问答-------------------- 是啊,我也关心你的答案为啥是2呢?有啥必然性呢 --------------------编程问答-------------------- 难道是匹配到的相同的数量? 那么直接Linq就可以啦。  --------------------编程问答--------------------
引用 4 楼 wanghui0380 的回复:
是啊,我也关心你的答案为啥是2呢?有啥必然性呢


引用 2 楼 q107770540 的回复:
答案为何是2? 


就是水桶的水量 取决于最低的木板

因为CCCCCCC这个产品只出现2次,所以 就是2

这个可以这样

 IList<string> _products = new List<string>();
            _products.Add("BBBBBB"); _products.Add("AAAAAA");
            _products.Add("AAAAAA"); _products.Add("BBBBBB");
            _products.Add("CCCCCCC"); _products.Add("CCCCCCC");
            _products.Add("BBBBBB"); _products.Add("BBBBBB");
            _products.Add("DDDDDD"); _products.Add("DDDDDD"); _products.Add("AAAAAA");
            IList<string> _rules = new List<string>(); _rules.Add("AAAAAA");
            _rules.Add("BBBBBB"); _rules.Add("CCCCCCC");
            List<int> list = new List<int>();
            foreach (var item in _rules)
            {
                int j = _products.Aggregate(0, (s, c) => s + (c == item ? 1 : 0));
                list.Add(j);
            }
            Console.WriteLine(list.Min());
            Console.ReadKey();
--------------------编程问答--------------------
var result=_products.Where(x=>_rules.Contains(x)).GroupBy(x=>x).Min(g=>g.Count());
--------------------编程问答-------------------- 此为仁兄所言极是 
如果
规则为

 IList<string> _rules = new List<string>();
            //_rules.Add("AAAAAA");
            //_rules.Add("AAAAAA");
            //_rules.Add("CCCCCCC");
/// 如果 _products 不变 
//那么结果 为 1 

那么 上面的
引用 6 楼 zhouqinghe24 的回复:
Quote: 引用 4 楼 wanghui0380 的回复:

是啊,我也关心你的答案为啥是2呢?有啥必然性呢


引用 2 楼 q107770540 的回复:
答案为何是2? 


就是水桶的水量 取决于最低的木板

因为CCCCCCC这个产品只出现2次,所以 就是2

这个可以这样

 IList<string> _products = new List<string>();
            _products.Add("BBBBBB"); _products.Add("AAAAAA");
            _products.Add("AAAAAA"); _products.Add("BBBBBB");
            _products.Add("CCCCCCC"); _products.Add("CCCCCCC");
            _products.Add("BBBBBB"); _products.Add("BBBBBB");
            _products.Add("DDDDDD"); _products.Add("DDDDDD"); _products.Add("AAAAAA");
            IList<string> _rules = new List<string>(); _rules.Add("AAAAAA");
            _rules.Add("BBBBBB"); _rules.Add("CCCCCCC");
            List<int> list = new List<int>();
            foreach (var item in _rules)
            {
                int j = _products.Aggregate(0, (s, c) => s + (c == item ? 1 : 0));
                list.Add(j);
            }
            Console.WriteLine(list.Min());
            Console.ReadKey();
--------------------编程问答-------------------- 除 --------------------编程问答--------------------

 IList<string> _products = new List<string>();
            _products.Add("BBBBBB"); _products.Add("AAAAAA");
            _products.Add("AAAAAA"); _products.Add("BBBBBB");
            _products.Add("CCCCCCC"); _products.Add("CCCCCCC");
            _products.Add("BBBBBB"); _products.Add("BBBBBB");
            _products.Add("DDDDDD"); _products.Add("DDDDDD"); _products.Add("AAAAAA");
            IList<string> _rules = new List<string>(); _rules.Add("AAAAAA");
            _rules.Add("AAAAAA"); _rules.Add("CCCCCCC");
            List<int> list = new List<int>();
            foreach (var item in _rules)
            {
               int mul= _products.Count(o=>o==item);//只需要加个重复的次数就可以了
                int j = _products.Aggregate(0, (s, c) => s + (c == item ? 1 : 0));
                list.Add(j/mul);//在这里对重复次数做处理
            }
            Console.WriteLine(list.Min());
           
         
            Console.ReadKey();


--------------------编程问答--------------------

//楼上的写错了,应该是规则的重复次数
 int mul=_rules.Count(o=>o==item);//只需要加个重复的次数就可以了
--------------------编程问答-------------------- 直接Linq --------------------编程问答-------------------- 2的话 是不是有组

AAAAAA,BBBBBB,CCCCCCC
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,