コード例 #1
0
ファイル: Addition.cs プロジェクト: rosenix/MathGen
            /// <summary>
            ///
            /// </summary>
            /// <param name="number">待分解的数</param>
            /// <param name="times">分解成几个数字</param>
            public static List <List <int> > Resolve(int number, int times)
            {
                var baseNumber = number;
                var maxValue   = number + 1 - times;

                var container = new AdditionItemContainer();

                for (var i = 1; i <= maxValue; i++)
                {
                    var addends = new List <int> {
                        i
                    };
                    ResolveCore(container, addends, baseNumber, number - i, times);
                }

                return(container.Items);
            }
コード例 #2
0
ファイル: Addition.cs プロジェクト: rosenix/MathGen
            /// <summary>
            ///
            /// </summary>
            /// <param name="container"></param>
            /// <param name="addends"></param>
            /// <param name="baseNumber"></param>
            /// <param name="number"></param>
            /// <param name="times"></param>
            private static void ResolveCore(AdditionItemContainer container, List <int> addends, int baseNumber, int number, int times)
            {
                if (addends.Count == times - 1)
                {
                    if (addends.Sum() < baseNumber)
                    {
                        addends.Add(baseNumber - addends.Sum());
                        container.Add(addends);
                    }
                    return;
                }

                for (var i = 1; i < number; i++)
                {
                    var dd = new List <int>(addends)
                    {
                        i
                    };

                    ResolveCore(container, dd, baseNumber, number - 1, times);
                }
            }