zoukankan      html  css  js  c++  java
  • 代码段,数字拆分用

    烂代码一段,备用,不是备看,万一哪天要用一下呢。

    功能:把数字拆分,尽量在40以内,后面会很慢。如3可分成 1,1,1;1,2; 如4可分成 1,1,1,1;1,3;1,1,2;2,2;

            static void Main(string[] args)
            {
                var x = SplitNumber(40);
                foreach (var a in x)
                {
                    foreach (var i in a)
                    {
                        Console.Write("{0}	", i);
                    }
                    Console.WriteLine();
                }
    
                Console.Read();
            }
    
            private static List<List<int>> SplitNumber(int num)
            {
                if (num <= 0) return null;
    
                List<List<int>> ret = new List<List<int>>();
                List<int> a = new List<int>();
                a.Add(1);
                ret.Add(a);
    
                int ct = num - 1;
                while (ct > 0)
                {
    
                    int rct = ret.Count;
                    for (int i = 0; i < rct; i++)
                    {
                        var tp = ret[0];
                        ret.Remove(ret[0]);
    
                        var cp = new List<int>(tp.ToArray());
                        cp.Add(1);
                        if (!Exists(ret, cp))
                            ret.Add(cp);
    
                        List<int> used = new List<int>();
                        for (int j = 0; j < tp.Count; j++)
                        {
                            var cpv = new List<int>(tp.ToArray());
                            cpv[j] = cpv[j] + 1;
    
                            if (!Exists(ret, cpv))
                                ret.Add(cpv);
                        }
                    }
    
                    ct--;
                }
    
                return ret;
            }
    
            private static bool Exists(List<List<int>> a, List<int> b)
            {
                foreach (var x in a)
                {
                    if (x.Count == b.Count)
                    {
                        bool flag = false;
                        foreach (var i in x)
                        {
                            if (!b.Contains(i))
                            {
                                flag = true;
                                break;
                            }
    
                        }
                        if (!flag)
                            return true;
                    }
                }
                return false;
            }
  • 相关阅读:
    apio2018题解
    ynoi2018
    hdu2036
    Morley's Theorem
    计算几何
    luogu1355 神秘大三角
    poj2398
    洛谷---小L和小K的NOIP考后放松赛
    LibreOJ β Round #7
    python3
  • 原文地址:https://www.cnblogs.com/gw2010/p/4882682.html
Copyright © 2011-2022 走看看