C# 部分演算法

來源:互聯網
上載者:User

        /// <summary>

        /// 寫一個函數處理字串,比如輸入”I am a girl”,輸出”girl a am I”

        /// </summary>

        /// <param name="p"></param>

        /// <returns></returns>

        private static string  StringConvert(string p)

        {

            string convertion = null;

            Stack stack = new Stack();

            int i = 0;

            int j = 0;

            for (int h = 0; h < p.Length; h++)

            {

                if (p.Substring(h,1)==" ")

                {

                    j = h;

                    stack.Push(p.Substring(i,j-i));

                    i = j + 1; 

                }         

            }

            stack.Push(p.Substring(i,p.Length-i));

            int count = stack.Count;

            for (int m = 0; m<count; m++)

            {

                if (m == 0)

                {

                    convertion = (string)stack.Pop();

                }

                else

                {

                    convertion = convertion+" " + (string)stack.Pop();

                }

            }

            return convertion;

        }

------------------------------------------------------------------------------------------------------------------------

求兩個數的最大公約數【輾轉相除法】.

  當兩個數都較大時,採用輾轉相除法比較方便.其方法是:

  以小數除大數,如果能整除,那麼小數就是所求的最大公約數.否則就用餘數來除剛才的除數;再用這新除法的餘數去除剛才的餘數.依此類推,直到一個除法能夠整除,這時作為除數的數就是所求的最大公約數.

  例如:求4453和5767的最大公約數時,可作如下除法.

  5767÷4453=1餘1314

  4453÷1314=3餘511

  1314÷511=2餘292

  511÷292=1餘219

  292÷219=1餘73

  219÷73=3

  於是得知,5767和4453的最大公約數是73.

  輾轉相除法適用比較廣,比短除法要好得多,它能保證求出任意兩個數的最大公約數.      

        /// <summary>

        /// 輾轉相除法:求兩個數的最大公約數

        /// </summary>

        /// <param name="num1"></param>

        /// <param name="num2"></param>

        /// <returns></returns>

        private static int Gcd(int num1, int num2)

        {

            int gcd=0;

            if (num1==num2)

            {

                gcd = num1;

            }

            if (num1>num2)

            {

                int tmp = num1;

                num1 = num2;

                num2 = tmp;

            }

         

            if (num2 % num1 == 0)

            {

                gcd = num1;

            }

            else

            {

                int tmp = num1;

                num1 = num2 % num1;

                num2 = tmp;

                gcd = Gcd(num1, num2);

            }

            return gcd;

        }

P.S: 最小公倍數 = 二數中的大數/最大公約數)*小數

------------------------------------------------------------------------------------------------------------------------

        /// <summary>

        /// 求int[]數組裡面最大和第二大的數

        /// </summary>

        /// <param name="max"></param>

        /// <param name="second"></param>

        /// <param name="a"></param>

        private static void MaxAndSecond(ref int max, ref int second, int[]a)

        {

            max = second = a[0];

            for (int i = 0; i < a.Length; i++)

            {

                if (a[i]>max)

                {

                    second = max;

                    max = a[i];

                }

                else if(a[i]>second)

                {

                    second = a[i];

                }

            }

        }

------------------------------------------------------------------------------------------------------------------------

        /// <summary>

        /// 求1~N的素數

        /// </summary>

        /// <param name="p"></param>

        private static void PrintPrime(int p)

        {

            if (p>=2)

            {

                System.Console.WriteLine("Parime:" + 2);

            }

            //不需要判斷2以外的偶數,因為它們都不是素數,而i從非偶數3開始計數

            for (int i = 3; i <= p; i = i + 2)

            {

                if (IsPrime(i))

                {

                    System.Console.WriteLine("Parime:" + i);

                }

            }

            Console.Read();

        }

        private static bool  IsPrime(int n)

        {

            //1,2的處理

            if (n==1)

            {

                return false;

            }

            if (n == 2)

            {

                return true;

            }

            //1,2以外的數的處理

            else

            {

                for (int i = 2; i < Math.Sqrt(n) + 1; i++)

                {

                    if (n % i == 0)

                        return false;

                }

            }

            return true;

        }       

 P.S: 1不是素數。

------------------------------------------------------------------------------------------------------------------------

        /// <summary>

        /// 實現一個函數,要求在字串strA中找出strB出現的次數

        /// </summary>

        /// <param name="strA"></param>

        /// <param name="strB"></param>

        /// <returns></returns>

        private static int GetSubStrCount(char[] strA, char[] strB)

        {

            int count = 0;

          

            for (int i = 0; i < strA.Length; i++)

            {

                int length = 0;

                int iA = i;

                for (int j = 0; j < strB.Length; j++)

                {

                    if (strB[j] != strA[iA])

                    {

                        break;

                    }

                    else

                    {

                        length = j+1;

                        iA++;

                    }

                }

                if (length==strB.Length)

                {

                    count++;

                }

            }

            return count;

        }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.