一道算法题

小明正看着 203879 这个数字发呆。

    原来,203879 * 203879 = 41566646641

    这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。

    具有这样特点的6位数还有一个,请你找出它!

    再归纳一下筛选要求:
    1. 6位正整数
    2. 每个数位上的数字不同
    3. 其平方数的每个数位不含原数字的任何组成数位

答案是一个6位的正整数。

 

 /// <summary>
    /// 不同数字组成的6位数,其平方值中的各个数都和这六位数不同。
    /// </summary>
    public class NumberInMi
    {
        /// <summary>
        /// 获取6位数的数组表示。
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        private int[] GetArray(int num)
        {
            int arrrayLenth = num.ToString().Length;
            int[] nums = new int[arrrayLenth];
            for (int i = 0; i < arrrayLenth; i++)
            {
                nums[i] = num % 10;
                num = num / 10;
            }
            return nums;
        }
        /// <summary>
        /// 判断num是否是不同数字组成的6位数。
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public bool IsSame(int[] nums)
        {
            for (int i = 0; i < nums.Length+1; i++)
            {
                for (int j = i+1; j <nums.Length; j++)
                {
                    if (nums[i]==nums[j])
                    {
                        return true;
                    }
                }
            }
            return false;
        }//end IsSame


        /// <summary>
        /// 平方值中的各个数都和这六位数不同
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public bool IsSameWithSpare(long num)
        {
            long b = num * num;
            long[] orig = GetArray(num);
            long[] sp = GetArray(b);
            //if (IsSame(sp))
            //{
            //    return true;
            //}
            for (int i = 0; i < orig.Length; i++)
            {
                for (int j = 0; j < sp.Length; j++)
                {
                    if (orig[i]==sp[j])
                    {
                        return true;
                    }
                }
            }
            return false;
        }

        private bool IsSame(long[] nums)
        {
            for (int i = 0; i < nums.Length + 1; i++)
            {
                for (int j = i + 1; j < nums.Length; j++)
                {
                    if (nums[i] == nums[j])
                    {
                        return true;
                    }
                }
            }
            return false;
        }

        private long[] GetArray(long b)
        {
            int length = b.ToString().Length;
            long[] arr = new long[length];
            for (int i = 0; i < length; i++)
            {
                arr[i]= b % 10;
                b = b / 10;
            }
            return arr;
        }

        /// <summary>
        /// 结果:203879 639172
        /// </summary>
        public void Run()
        {
            for (long i = 100000; i < 9999999; i++)
            {
                if (!IsSame(GetArray(i)))
                {
                    if (!IsSameWithSpare(i))
                    {
                        Console.WriteLine("result:" + i.ToString());
                    }
                }
            }
        }
    }

 

posted @ 2013-11-21 09:20  viola  阅读(227)  评论(0编辑  收藏  举报