• 程序设计中的数学思维函数总结(代码以C#为例)


    最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算。

    现将经常会使用到的基础函数做一总结,供大家分享、自己备用。

    1.判断一个数是否为奇数

    定义:整数中,能被2整除的数是偶数,不能被2整除的数是奇数

    思路点:n%2!=0则为奇数

            /// <summary>
            /// 判断一个整数是不是奇数
            /// </summary>
            /// <param name="n">要判断的整数</param>
            /// <returns>是否奇数</returns>
            static bool IsOdd(int n)
            {
                //不能被2整除,则为奇数
                if (n % 2 != 0)
                {
                    return true;
                }
                //否则不为奇数
                else
                {
                    return false;
                }
            }

    2.判断一个数是否为质数

    定义:在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

    方法一:查找法

    思路点:设置循环,i大于等于2且小于n,若存在n%i==0的数,则不是质数

            /// <summary>
            /// 判断一个整数是不是质数
            /// </summary>
            /// <param name="n">大于1的自然数</param>
            /// <returns>是否质数</returns>
            static bool IsPrime(int n)
            {
                //在大于等于2到小于n的范围内,寻找是否存在能整除n的数
                for (int i = 2; i < n; i++)
                {
                    //如果存在能整除n的数,则返回false
                     if(n%i==0)
                     {
                         return false;
                     }
                }
                //循环结束,未找到能整除n的数,则返回true
                 return true;
            }

    方法二:计数法

    思路点:设置循环,i大于等于2且小于n,若存在n%i==0的数,则进行计数;循环结束后,计数大于0,则不是质数

            /// <summary>
            /// 判断一个整数是不是质数
            /// </summary>
            /// <param name="n">大于1的自然数</param>
            /// <returns>是否质数</returns>
            static bool IsPrime(int n)
            {
                //设置变量sum,用于保存能整数n的数的数量
                int sum = 0;
                //在大于等于2到小于n的范围内,寻找是否存在能整除n的数
                for (int i = 2; i < n; i++)
                {
                    //如果存在能整除n的数,则sum自增1
                     if(n%i==0)
                     {
                         sum++;
                     }
                }
                //循环结束,如果sum大于0,则代表不是质数,返回false;否则是质数,返回true
                if (sum > 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }

    3.判断一个数是否为自幂数

    定义:一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153),3位数的3次幂数称为水仙花数。

    思路点:a.将要判断的正整数转换为string类型,得到位数len;

                  b.将正整数%10得到个位,/10%10得到十位,/100%10得到百位,以此类推,直到/10^(len-1)%10得到最大位;

                  c.将各位数的len次幂相加,判断是否与正整数相等,相等则为自幂数。

            /// <summary>
            /// 判断一个数是否为水仙花数
            /// </summary>
            /// <param name="n">位数大于等于3的正整数</param>
            /// <returns>是否水仙花数</returns>
            static bool IsNarcissisticNumber(int n)
            {
                //定义len,赋值为n的位数
                int len = (n.ToString()).Count();
                //定义power,赋值为10的(len-1)次幂
                int power = 1;
                for (int i = 1; i < len; i++)
                {
                    power *= 10;
                }
                //定义sum,赋值为各位数的len次幂之和
                int sum = 0;
                for (int j = 1; j <= power; j*=10)
                {
                    //定义multiple,赋值为各位数的len次幂
                    int multiple = 1;
                    for (int i = 1; i <=len; i++)
                    {
                        multiple*=n / j % 10;
                    }
                    sum += multiple;
                }
                //如果sum等于n,则是水仙花数,返回turn;否则不是,返回false
                if (n == sum)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

    4.反序输出

    定义:将需求从右到左输出在从左到右的输出端

    思路点:将字符串看作是char的数组,设置循环,从最后一个元素开始输出,直到输出第一个元素

            /// <summary>
            /// 反序输出
            /// </summary>
            /// <param name="str">需要反序输出的字符串</param>
            static void Antitone(string str)
            {
                for (int i = str.Length-1; i >= 0; i--)
                {
                    Console.Write(str[i]);
                }
            }

    5.斐波拉契数列

    定义:斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

    思路点:函数调用自身进行运算

            /// <summary>
            /// 查找斐波拉契数列第n位的数
            /// </summary>
            /// <param name="str">位数</param>
            /// <return>斐波拉契数列第n位的数</return>>
            static int FibonacciSequence(int n)
            {
                if (n == 1 || n == 2)
                {
                    return 1;
                }
                else
                {
                    return FibonacciSequence(n - 1) + FibonacciSequence(n - 2);
                }
            }

    6.阶乘

    定义:一个正整数的阶乘,是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!

    思路点:函数调用自身进行运算

            /// <summary>
            /// 计算阶乘
            /// </summary>
            /// <param name="str">正整数</param>
            /// <return>阶乘结果</return>>
            static int Factorial(int n)
            {
                if (n == 1)
                {
                    return 1;
                }
                else
                {
                    return n*Factorial(n - 1);
                }
            }
  • 相关阅读:
    手机震动的节奏 Vibrator
    Andorid ZoomControls的用法
    Android AutoCompleteTextView用法
    动态添加/删除Spinner 菜单
    [国家集训队]排队
    [HNOI2012]永无乡
    文艺平衡树
    【AGC板刷记录】
    高级打字机
    [JSC2021 A~D + F]
  • 原文地址:https://www.cnblogs.com/zhongjuan/p/C-sharp_function.html
Copyright © 2020-2023  润新知