有没有什么好方法判断3个数字相领的,比如
3,4,5
5,4,3
6,5,4注意,654和465都是相邻数

解决方案 »

  1.   

    1.判断是否有重复值...有则不是...
    2.max-min == 2 即为相邻数...更多数...max-min == count-1...
      

  2.   

    435算不算   4楼实际代码不少吧。。
    435不算的话 
    if((a[0]-a[1])*(a[1]-a[2])==1)
    {
    }(如果确定是整形的话。。)
      

  3.   


    这个怎么判断3、4、3这样的数据? private bool GetBoolResult(int[] numbers)
    {
    int sum=numbers[0]+numbers[1];
    int abs=(int)Math.Abs(numbers[0]-numbers[1]);
    if((abs==2&&numbers[2]==sum/2)||(abs==1&&(numbers[2]==(sum+3)/2||numbers[2]==(sum-3)/2))) return true;
    else return false;
    }
    这代码不算多吧?
      

  4.   

    改一下,除都改成乘:
            private bool GetBoolResult(int[] numbers)
            {
                int sum=numbers[0]+numbers[1];
                int abs=(int)Math.Abs(numbers[0]-numbers[1]);
                if((abs==2&&numbers[2]*2==sum)||(abs==1&&(numbers[2]*2==(sum+3)||numbers[2]*2==(sum-3)))) return true;
                else return false;
            }
      

  5.   

    又写了些冗余代码,再减少些代码:
    private bool GetBoolResult(int[] numbers)
    {
    int sum=numbers[0]+numbers[1];
    int abs=Math.Abs(numbers[0]-numbers[1]);
    return (abs==2&&numbers[2]*2==sum)||(abs==1&&(numbers[2]*2==(sum+3)||numbers[2]*2==(sum-3)));
    }
      

  6.   

    1、排序;
    2、计算 2a=b+c
      

  7.   

    看了半天
    (abs==1&&(numbers[2]*2==(sum+3)||numbers[2]*2==(sum-3))
    可以写
    (abs==1&&(Math.Abs(numbers[2]*2-sum)==3))
      

  8.   

    啊没看到  ~~if(Math.Abs(a[0]-a[1])*(a[1]-a[2])+0.5)==1)
    {
    }
    啊 ~~~不知道对不对 欢迎检查。。
      

  9.   


    这个方法很好呀,我同意15楼的,应该是2b=a+c吧.
      

  10.   

    private bool Result(int[] numbers)
    {
        int i=numbers[0]-numbers[1];
        int j=numbers[1]-numbers[2];
        return (Math.Abs(a + b) <= 2) && (Math.Abs(a - b) <= 3) && (a * b != 0);
    }
      

  11.   

    min_jie的代码对的 
    15L的代码很简洁 至少21L能看懂..至于我的。。我有点不自信
      

  12.   


    AB哪来的?
    是IJ的话
    434带进去 结果不对  
    大概。。
      

  13.   

    果然要靠自己检查  少写个 “。5”...
    应该是
    if(Math.Abs(a[0]-a[1])*(a[1]-a[2])+0.5)==1.5)
    {


    if(Math.Abs(a[0]-a[1])*(a[1]-a[2])*2+1)==3)
    {
      

  14.   

    是没括好果然不自信是对的。。 习惯让VS检查了。。
    if(Math.Abs((a[0]-a[1])*(a[1]-a[2])+0.5)==1.5)
    {
    }

    if(Math.Abs((a[0]-a[1])*(a[1]-a[2])*2+1)==3)
    {
    }
      

  15.   

    至于15L
    我是说 
    “min_jie的代码对的 ”
    “15L的代码很简洁 至少21L能看懂.. ”
    请连起来看
      

  16.   

    先用3行代码求3个差
    然后再N个IF来判断?“但是三个数不能有正有负。” 那么还要3次求绝对值?
      

  17.   

    我不太明白楼主最简单的方法是什么意思,但我认为我的方法不难
        private bool isSeriesNumber(int[] array)
        {
            bool rtn = true;
            Array.Sort(array);
            for (int i = 1; i < array.Length; i++)
            {
                if (array[i] - array[i - 1] != 1)
                {
                    rtn = false;
                    break;
                }
            }
            return rtn;
        }
      

  18.   

    引用 35 楼 rock29 的回复:
    既然是相邻,那么三个数互相减一遍,肯定有两个1,一个2,即可判定相邻。 
    但是三个数不能有正有负。 
    同理,如果三个数是2 4 6;13 19 25等等,那么其中两个差数的和必等于第三个差数。 
    至于代码,要自己琢磨喽,琢磨出来可是必拿别人写好的收获大多了,对自己有好处的。 
     
    先用3行代码求3个差 
    然后再N个IF来判断? 回答:既然楼主说“判断3个数字相领的”那么只需3个if判断即可,不需要N个。
    你要是看看41楼的方法就发现与我的方法是一样的。“但是三个数不能有正有负。” 那么还要3次求绝对值?
    回答:三个数如果有正有负那么就不能用我说的方法。
      

  19.   

    回42L
    N包括3
    另外这好象还没 你30L说的 
    NUM.Sort() 
    if(NUM[2]-NUM[1]==1&&NUM[1]-NUM[0]==1)
    简单吧
      

  20.   

    3个数的判断自然一个if就解决了,如果你要更简单的,还可以用3元运算符。
    如果是N个数,那么还是41楼通用。
      

  21.   

    lz也太懒了...算法都给你了...
    bool CheckArray(int[] array)
    {
        if (array.Distinct().Count() != array.Length)
            return false;
        return array.Max() - array.Min() == array.Length - 1;
    }当然...如此简洁的代码需要Linq支持...
      

  22.   

    再来个不用Linq的...两个算法都支持任意个数数组,算法原理见小学数学课本...
    bool CheckArray(int[] array)
    {
        Array.Sort(array);
        for (int i = 1; i < array.Length; i++)
        {
            if (array[i] == array[i - 1])
                return false;
        }
        return array[array.Length-1] - array[0] == array.Length - 1;
    }
      

  23.   


    namespace WindowsApplication13
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            List<int> Numbers = new List<int>();            Numbers.Add(6);
                Numbers.Add(5);
                Numbers.Add(4); 
                MessageBox.Show(IsNearBy(Numbers).ToString());
            }        bool IsNearBy(List<int> Numbers)
            {
                Numbers.Sort();
                for (int i = Numbers[0]; i <= Numbers[Numbers.Count - 1]; i++)
                    if (Numbers.IndexOf(i) == -1)
                        return false;
                return true;
            }
        }
    }
      

  24.   


    晕。。是其他的话,后面就不用判断了,直接就返回false了。。
      

  25.   

    如果都是整数的话,满足条件
    1.三数不等
    2.max与min差为2
    就成如果是小数,就要问一下“相邻”的定义了。
      

  26.   

    if(Math.Abs((a[0]-a[1])*(a[1]-a[2])+0.5)==1.5)
    {
    }
    不要符点的话
    if(Math.Abs((a[0]-a[1])*(a[1]-a[2])*2+1)==3)
    {

    不要函数的话
    if((a[0]-a[1])*(a[1]-a[2])==1||(a[0]-a[1])*(a[1]-a[2])==-2)
    {
    }
      

  27.   

    还是排序,首位和末位的差的绝对值等于数字个数减1
    如果有n个数:
    Math.Abs( a[0] - a[n-1] ) = n-1