注册 登录
编程论坛 C# 论坛

用C#找出最大子分式,求完整代码

zljskm 发布于 2015-12-04 13:22, 1334 次点击
有这样一组数{12,4,5,6,5,8,10,7,16,14,18,30},找

出这组数的最大子分式。子分式的定义:从这组数的第一个数开始连

续的升序直到出现不符合的数结束,这样的一组数为子分式。例如{2
,3,4,5,4,6,3}这组子分式为{2,3,4,5}{4,6}{3}。


就是把这个数组先分成五个子分式{12},{4,5,6},{5,8,10},{7,16,},{14,18,30},
然后根据数组长度比较选出最长的,最后的答案要是{4,5,6},{5,8,10},{14,18,30},求代码,求大神帮忙,谢谢
3 回复
#2
leisiege2015-12-07 12:38
回复 楼主 zljskm
输入是数组。输出是数组集合是吧?我觉得用list<int>来做比较好。我去想想
#3
leisiege2015-12-07 13:03
程序代码:
class MyMath
    {
        public static List<List<int>> DivideList(List<int> list)
        {
            List<List<int>> newList = new List<List<int>>();
            List<int> subList = new List<int>();
            subList.Add(list[0]);
            for (var i = 1; i < list.Count; i++)
            {
                if (list[i] > list[i - 1])
                {
                    subList.Add(list[i]);
                }
                else
                {
                    newList.Add(subList);
                    subList.Clear();
                    subList.Add(list[i]);
                }
            }
            newList.Add(subList);
            return newList;
        }
        public static List<int> GetLongestList(List<List<int>> newList)
        {
            List<int> list = new List<int>();
            list = newList[0];
            for (var i = 1; i < newList.Count; i++)
            {
                if (newList[i].Count > list.Count)
                {
                    list = newList[i];
                }
            }
            return list;
        }
        public static List<int> GetLongestListFromList(List<int> list)
        {
            return GetLongestList(DivideList(list));
        }
    }
#4
leisiege2015-12-07 13:04
这个是类。第一个是分割list。第二个是找最大的list。第三个是前面2个方法放一起了。再主进程调用就行了
1