zoukankan      html  css  js  c++  java
  • 一道算法题

    给出几种产品组合,求出产品最大优惠值

    protected void Button1_Click(object sender, EventArgs e)
        {
            string str_input = TextBox1.Text;
    
            List<Product> list_Rule = new List<Product>();
            //规则
            list_Rule.Add(new Product("A", 1));
            list_Rule.Add(new Product("B", 1));
            list_Rule.Add(new Product("C", 2));
            list_Rule.Add(new Product("E", 1));
            list_Rule.Add(new Product("AB", 3));
            list_Rule.Add(new Product("BC", 4));
            list_Rule.Add(new Product("BDF", 6));
            list_Rule.Add(new Product("ABDF", 9));
            list_Rule.Add(new Product("ABCD", 10));
          
            var s1 = from v in list_Rule
                     select v.StrName;
    
            List<string> resultList = GetResult(str_input, s1.ToArray());
            string resultString = null;
            for (int i = 0; i < resultList.Count; i++)
            {
                resultString += resultList[i] + ",";
            }
            
            if (resultString.Length > 0) 
            {
                var s2 = from v in list_Rule
                         join o in resultList
                         on  v.StrName equals o.ToString()
                         select v.Price;            
                Label1.Text = "优惠"+ s2.Max() +"元";
            }
            else
                Label1.Text = "优惠O元";
    
    
        }
    
        private List<string> GetResult(string s2, string[] s1)
        {
            List<string> resultList = new List<string>();
            //先初步过滤长度比s2大的字符串
            List<string> newS1 = new List<string>();
            for (int i = 0; i < s1.Length; i++)
            {
                if (s1[i].Length <= s2.Length)
                {
                    newS1.Add(s1[i]);
                }
            }
            int num2 = GetNum(s2);
            int itemNum = 0;
            for (int i = 0; i < newS1.Count; i++)
            {
                itemNum = GetNum(s1[i]);
                if ((itemNum & num2) == itemNum)
                {
                    resultList.Add(s1[i]);
                }
            }
            return resultList;
        }
    
        //把字符串成位串一共26位,从低位到高位依次标识字符(a-z)是否在字符串中
        private int GetNum(string s)   
        {
            int n = 0;//4个字节=32位
            char aChar;
            char constChar = 'A';        
            int position = 0; //字符和'a'的差为k,根据映射规则,说明2进制数的
            //从低位算起的第(k+1)位上为1,对应的整数为2的k次方;
            //首先把每个字符串映射成26位的二进制数 
            //  zy xwvu tsrq ponm lkji hgfe dcba           
            //例如 s1[i]="abc"——>00 0000 0000 0000 0000 0000 0111=square(2,a-(a-1))+square(2,b-(a-1))++square(2,b-(a-1));
            //s2="cbeh"——>       00 0000 0000 0000 0000 1001 0110
            for (int i = 0; i < s.Length; i++)
            {
                aChar = s[i];
                position = (aChar - constChar);
                n += (int)Math.Pow(2, position);
            }
            return n;
        }
     
    
    
    
        class Product
        {
            String strName;
            int price;
    
            public Product(string p, int p_2)
            {
                // TODO: Complete member initialization
                this.strName = p;
                this.price = p_2;
            }
    
    
            public String StrName
            {
                get { return strName; }
                set { strName = value; }
            }
    
    
            public int Price
            {
                get { return price; }
                set { price = value; }
            }
    
    
        }
    

      虽然表面是解决了问题,但是细想想还是没有完美的解决这题,如果商品名称换成ID【数字】这个方法不行了。

          欢迎集思广益寻找出这题最终答案

  • 相关阅读:
    随笔2
    随笔
    关于updateElement接口
    随笔1
    本地访问正常,服务器访问乱码 记录
    Redis (error) NOAUTH Authentication required.解决方法
    tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.
    微信公众号消息回复
    微信公众号 报token验证失败
    idea中web.xml报错 Servlet should have a mapping
  • 原文地址:https://www.cnblogs.com/Karson001/p/3060186.html
Copyright © 2011-2022 走看看