3->7
8->12
13->17
21->25有这样一组数据
要求得到的结果是 
3->7     1
8->17    2
21->15  1

解决方案 »

  1.   

    3->7
    8->12
    13->17
    21->25有这样一组数据
    要求得到的结果是  
    3->7 1
    8->17 2
    21->15 1
    你这问题 提的,上面8->12  下面8->17 另外 如果照你这么写的 无需算法前面是奇数后面是1
    前面是偶数 后面是2
    你给的数字太少了 
      

  2.   

    本帖最后由 caozhy 于 2011-09-01 09:06:24 编辑
      

  3.   

    奥 写错了
    是21->25  意思就是把这组数据中相连的 如:8->12  13->17 只取8->17   不相连的提出来就行
      

  4.   

    给的信息量有点少, 而且我怀疑下面一组的 21->15 是打错了, 应该是21 -> 25 吧.这样的话,应该就是以4为一步,求 A -> B 有几步. 算法简单了.      
    int Step(int a, int b)
    {
        return (b-a)/4;
    }
     
      

  5.   

    这个啊,你看你这些数据像什么,链表
    如果用链表来处理,应该能解决
    3->7  两个节点
    8->12 又两个节点
    13->17 两个节点,但是节点前面有连续节点
    21->25 节点前面没有连续节点递归节点来做吧,3->7 
    8->17  节点长度变成2
    21->15 
      

  6.   


    比较笨的方法,用hashtable 实现了,不知道是不是满足你的兽欲  static Hashtable hash = new Hashtable();
            static int[] Array = { 1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,21,22,23,24,25 };
            static void Main(string[] args)
            {
                Sort();
                for (int i = 0; i < Array.Length; i++)
                {
                    if (i == 0)
                        hash.Add(Array[i], null);
                    else
                    {
                        int m = Recursion(i);
                        //hash.Add(Array[m], Array[i]);
                        if (m == -1)
                        {
                            hash[Array[i]] = null;
                        }
                        else
                            hash[Array[(int)m]] = Array[i];
                    }
                }
            }        public static int Recursion(int i)
            {
                if (i == 0)
                    return 0;
                else
                {
                    if (Array[i] - 1 == Array[i - 1])
                        return Recursion(i - 1);
                    else
                       return i;
                }
            }
            public static void Sort()
            {
                int temp = 0;
                for (int i = 0; i < Array.Length; i++)
                {
                    for (int j = 0; j < i; j++)
                    {
                        if (Array[i] < Array[j])
                        {
                            temp = Array[i];
                            Array[i] = Array[j];
                            Array[j] = temp;
                        }
                    }
                }
            }
      

  7.   

                        //hash.Add(Array[m], Array[i]);
                        if (m == -1)
                        {
                            hash[Array[i]] = null;
                        }
                        else这部分貌似不用要了