(算法题)几道算法题

来源:互联网 发布:transmit mac 编辑:程序博客网 时间:2024/06/05 11:53

大家好,这次列举的6道算法题,分别如下:

1:一个长度为99的数组中存放1-100 中的99个数,这99个数都不相同,求1-100中哪个数是没在数组中出现的。

2:将一个字符串逆序输出。

3:拆分一个数,如果它的每一位的立方和等于原数,那么它就是水仙花数,求1-1000000之间的所有水仙花数。如153 = 1*1*1 + 5*5*5 + 3*3*3

4:如果A数的所有因数(不包括A)之和等于B,并且B的所有因数(同样也不包括B)之和也等于A,那么A和B就是亲合数,求1-100000之间的所有亲合数对。如220与284就是亲合数,284 = 1+2+4+5+10+20+11+22+55+110(220的因数) 220 = 1+2+4+71+142(284的因数)

5:分别使用递归和不使用递归实现斐波那契数列,斐波那契数列:1 1 2 3 5 8 13...。

6:将一个数分解为它的所有质因数的积的形式如:28 = 2 * 2 * 7。

暂时先写6个吧。时间有限。

=================================================================================================

解答:

1:不存在的那个数重要用1-100之间的和(5050)减去数组的全部和就可以了。

2:这个问题可以用栈实现,那么也就可以使用递归函数实现。

3:把一个数进行取余,除10运算提取每一位。

4:因数都是成对出现的,因此,只要在1-Sqrt(A)之间找它的因数即可。

5:索引从0开始,每一个都是前2个的和。

6:如果一个数在2-Sqrt(A)之间没有一个因数,那么这个数就是质数。

=================================================================================================

 

using System;using System.Linq;namespace LilacFlower{    class Program    {        static void Main(string[] args)        {            // 第一题            Console.WriteLine("1:=============================================");            int[] data = new int[99];            // 缺少的数是100            for (int i = 0; i < 99; i++)            {                data[98 - i] = i + 1;            }            Console.WriteLine("The missing number is " + Topic1(data));            Console.WriteLine();            // 第二题            Console.WriteLine("2:=============================================");            string txt = "LilacFlower!";            var cr = txt.ToCharArray();            Topic2(cr, 0);            Console.WriteLine();            Console.WriteLine();            // 第三题            Console.WriteLine("3:=============================================");            Topic3();            Console.WriteLine();            // 第四题            Console.WriteLine("4:=============================================");            Topic4();            Console.WriteLine();            // 第五题             Console.WriteLine("5:=============================================");            Console.WriteLine("Using recursive: the 7th Fibonacci: {0}", Topic5_Recursive(6));            Console.WriteLine("No using recursive: the 7th Fibonacci: {0}", Topic5_NoRecursive(6));            Console.WriteLine();            // 第六题             Console.WriteLine("6:=============================================");            Topic6(220);        }        #region 第一题        /// <summary>        /// 第一题        /// </summary>        private static int Topic1(int[] data)        {            return 5050 - data.Sum();        }        #endregion        #region 第二题        /// <summary>        /// 第二题        /// </summary>        /// <param name="data"></param>        /// <param name="begin"></param>        private static void Topic2(char[] data, int begin)        {            if (begin == data.Length)                return;            Topic2(data, begin + 1);            Console.Write(data[begin]);        }        #endregion        #region 第三题        /// <summary>        /// 第三题        /// </summary>        private static void Topic3()        {            for (int i = 1; i < 1000000; i++)            {                int sum = 0, j = i;                while (j != 0)                {                    // 把数的每一位提取出来                    int k = (j % 10);                    sum += k * k * k;                    j = j / 10;                }                //水仙花数                if (sum == i)                {                    Console.WriteLine("Daffodils number:" + sum);                }            }        }        #endregion        #region 第四题        /// <summary>        /// 第四题        /// </summary>        private static void Topic4()        {            for (int i = 1; i < 100001; i++)            {                int fam = SumOfFactor(i);                // 排除像6这样的完全数,并且防止同一对亲合数出现2次                if (fam > i && i == SumOfFactor(fam))                {                    Console.WriteLine("The affinity number :" + i + "\t" + fam);                }            }        }        /// <summary>        /// 求一个数的所有因数的和        /// </summary>        /// <param name="number"></param>        /// <returns></returns>        private static int SumOfFactor(int number)        {            int sum = 0;            for (int i = 2; i <= Math.Sqrt(number); i++)            {                // i是number的因数                if (number % i == 0)                {                    sum += (i + number / i);                }            }            // 1是所有数的因数            return sum + 1;        }        #endregion        #region 第五题        /// <summary>        /// 第五题,使用递归        /// </summary>        private static int Topic5_Recursive(int number)        {            if (number == 1 || number == 0)                return 1;            return Topic5_Recursive(number - 1) + Topic5_Recursive(number - 2);        }        /// <summary>        /// 第五题,不使用递归        /// </summary>        private static int Topic5_NoRecursive(int number)        {            int i = 1, j = 1, times = 0;            while (times++ < number)            {                i = i + j;                j = i - j;            }            return j;        }        #endregion        #region 第六题        /// <summary>        /// 第六题        /// </summary>        /// <param name="data"></param>        private static void Topic6(int data)        {            Console.Write("{0} = ", data);            for (int i = 2; i <= Math.Sqrt(data); i++)            {                // i是data的因数                if (data % i == 0)                {                    data = data / i;                    Console.Write("{0} * ", i);                    i = 1;                }            }            Console.WriteLine("{0}", data);        }        #endregion    }}


附上结果吧: