解决方案 »

  1.   

    最笨的办法 string[] a = { "1", "2", "4", "5", "7", "9" };
                string n = "";
                List<string> ls = new List<string>();
                for (int i = 0; i < a.Length;i++ )
                {
                    if (i == 0)
                    {
                        n += a[i] + ",";
                    }
                    else 
                    {
                        if (a[i] == (int.Parse(a[i - 1]) + 1).ToString())
                        {
                            n += a[i] + ",";
                        }
                        else 
                        {
                            if(n!="")
                            ls.Add(n.TrimEnd(','));
                            n = "";
                        }
                    }
                }
                ///
                int cou = ls.Count;//符合条件的个数
      

  2.   

    上面的有点问题,下面是修改过的 string[] a = { "1", "2", "4", "5", "7", "9" };
                string n = "";
                List<string> ls = new List<string>();
                for (int i = 0; i < a.Length;i++ )
                {
                    if (i == 0)
                    {
                        n += a[i] + ",";
                    }
                    else 
                    {
                        if (a[i] == (int.Parse(a[i - 1]) + 1).ToString())
                        {
                            n += a[i] + ",";
                        }
                        else 
                        {
                            n=n.TrimEnd(',');
                            if (n != ""&&n.IndexOf(",")>-1)
                            {
                                ls.Add(n.TrimEnd(','));
                                n = a[i] + ",";
                            }
                        }
                    }
                }
                ///
                int cou = ls.Count;//符合条件的个数
      

  3.   

    还一个总组数 怎么出来
    总数组 是什么意思?描述一下里面1跟2 是一个连续的组   4跟5是一个连续的组   总数是2组 string[] a = { "1", "2", "4", "5", "7", "9" };
                string n = "";
                List<string[]> ls = new List<string[]>();
                for (int i = 0; i < a.Length;i++ )
                {
                    if (i == 0)
                    {
                        n += a[i] + ",";
                    }
                    else 
                    {
                        if (a[i] == (int.Parse(a[i - 1]) + 1).ToString())
                        {
                            n += a[i] + ",";
                        }
                        else 
                        {
                            n=n.TrimEnd(',');
                            if (n != ""&&n.IndexOf(",")>-1)
                            {
                                ls.Add(n.Split(','));
                                n = a[i] + ",";
                            }
                        }
                    }
                }
                ///
                int cou = ls.Count;//符合条件的个数定义变了,  List<string> ls = new List<string>();换成  List<string[]> ls = new List<string[]>();了
      

  4.   

    给你写一个using System;
    using System.Collections.Generic;
    using System.Linq;namespace ConsoleApplication1
    {
        class Program
        {        static void Main(string[] args)
            {
                var arr = new int[] { 1, 2, 3, 5, 6, 9, 11, 12 };
                var result = 寻找连续数字(arr).ToList();
                foreach (var s in result)
                {
                    foreach (var x in s)
                        Console.Write("{0} ", x);
                    Console.WriteLine();
                }
                Console.WriteLine("总共找到 {0} 组!", result.Count);
                Console.WriteLine("__________按任意键结束");
                Console.ReadKey();
            }        private static IEnumerable<IEnumerable<int>> 寻找连续数字(int[] arr)
            {
                return 寻找连续数字(arr, 0, arr.Length - 2);
            }        private static IEnumerable<IEnumerable<int>> 寻找连续数字(int[] arr, int start, int end)
            {
                for (var i = start; i <= end; i++)
                {
                    var x = 寻找连续数字(arr, i);
                    if (x != null)
                        yield return x;
                }
            }        private static IEnumerable<int> 寻找连续数字(int[] arr, int start)
            {
                var end = start + 1;
                for (; end < arr.Length && arr[end] == arr[end - 1] + 1; end++) { }
                if (end - start > 1)
                    return arr.Skip(start).Take(end - start);
                else
                    return null;
            }
        }
    }不过看得懂c#语法而看不懂算法逻辑,其实一点也没用。希望你要注意。
      

  5.   

    如果你需要跳过“包含”的输出组(例如1、2、3就包含了2、3),那么可以增加一个“跳过 i 下标”语句即可:using System;
    using System.Collections.Generic;
    using System.Linq;namespace ConsoleApplication1
    {
        class Program
        {        static void Main(string[] args)
            {
                var arr = new int[] { 1, 2, 3, 5, 6, 9, 11, 12 };
                var result = 寻找连续数字(arr).ToList();
                foreach (var s in result)
                {
                    foreach (var x in s)
                        Console.Write("{0} ", x);
                    Console.WriteLine();
                }
                Console.WriteLine("总共找到 {0} 组!", result.Count);
                Console.WriteLine("__________按任意键结束");
                Console.ReadKey();
            }        private static IEnumerable<IEnumerable<int>> 寻找连续数字(int[] arr)
            {
                return 寻找连续数字(arr, 0, arr.Length - 2);
            }        private static IEnumerable<IEnumerable<int>> 寻找连续数字(int[] arr, int start, int end)
            {
                for (var i = start; i <= end; i++)
                {
                    var x = 寻找连续数字(arr, i);
                    if (x != null)
                    {
                        yield return x;
                        i += x.Count() - 1;
                    }
                }
            }        private static IEnumerable<int> 寻找连续数字(int[] arr, int start)
            {
                var end = start + 1;
                for (; end < arr.Length && arr[end] == arr[end - 1] + 1; end++) { }
                if (end - start > 1)
                    return arr.Skip(start).Take(end - start);
                else
                    return null;
            }
        }
    }