国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#實(shí)現(xiàn)排列組合算法完整實(shí)例

2020-01-24 02:27:19
字體:
供稿:網(wǎng)友

排列組合是常見的數(shù)學(xué)問題,本文就以完整實(shí)例形式講述了C#實(shí)現(xiàn)排列組合算法的方法。分享給大家供大家參考之用。具體方法如下:

首先,數(shù)學(xué)中排列組合,可表示為:排列P(N,R)

其實(shí)排列實(shí)現(xiàn)了,組合也就實(shí)現(xiàn)了,組合C(N,R)就是P(N,R)/P(R,R) ,實(shí)現(xiàn)這一功能比較簡單的是遞歸算法,但考慮到遞歸的性能,下面采用了2種非遞歸的方法,具體代碼如下

using System;  using System.Collections.Generic;  namespace Test  {    class Program    {      static void Main(string[] args)      {        Console.WriteLine(P1(6, 3));        Console.WriteLine(P2(6, 3));        Console.WriteLine(C(6, 2));      }       /// <summary>      /// 排列循環(huán)方法      /// </summary>      /// <param name="N"></param>      /// <param name="R"></param>      /// <returns></returns>      static long P1(int N, int R)      {        if (R > N || R <= 0 || N <= 0 ) throw new ArgumentException("params invalid!");        long t = 1;        int i = N;                while (i!=N-R)        {          try         {            checked           {              t *= i;            }          }          catch         {            throw new OverflowException("overflow happens!");          }          --i;        }        return t;      }       /// <summary>      /// 排列堆棧方法      /// </summary>      /// <param name="N"></param>      /// <param name="R"></param>      /// <returns></returns>      static long P2(int N, int R)      {        if (R > N || R <= 0 || N <= 0 ) throw new ArgumentException("arguments invalid!");        Stack<int> s = new Stack<int>();        long iRlt = 1;        int t;        s.Push(N);        while ((t = s.Peek()) != N - R)        {          try         {            checked           {              iRlt *= t;            }          }          catch         {            throw new OverflowException("overflow happens!");          }          s.Pop();          s.Push(t - 1);        }        return iRlt;      }       /// <summary>      /// 組合      /// </summary>      /// <param name="N"></param>      /// <param name="R"></param>      /// <returns></returns>      static long C(int N, int R)      {        return P1(N, R) / P1(R, R);      }    }  }

希望本文所述對大家的C#程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀仁县| 尚义县| 长子县| 长沙市| 北辰区| 澄城县| 青州市| 钟山县| 水富县| 剑河县| 东乡| 拜城县| 普兰县| 教育| 沧源| 乡宁县| 平罗县| 阜宁县| 竹北市| 宁远县| 灵璧县| 遂平县| 志丹县| 专栏| 渭源县| 康保县| 波密县| 家居| 沈丘县| 江陵县| 泸州市| 金堂县| 高邮市| 象州县| 昌平区| 宿州市| 长春市| 威海市| 潜江市| 姚安县| 昭苏县|