最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年09月02日 09:45:28   投稿:shichen2014  
這篇文章主要介紹了C#實(shí)現(xiàn)排列組合算法的完整實(shí)例,文中實(shí)例主要展示了排列循環(huán)方法和排列堆棧方法,需要的朋友可以參考下

排列組合是常見(jiàn)的數(shù)學(xué)問(wèn)題,本文就以完整實(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)這一功能比較簡(jiǎ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);  
    }  
  }  
}

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

相關(guān)文章

  • C#字符串中去除多余的空格保留一個(gè)的實(shí)例

    C#字符串中去除多余的空格保留一個(gè)的實(shí)例

    下面小編就為大家分享一篇C#字符串中去除多余的空格保留一個(gè)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • C#泛型接口的協(xié)變和逆變

    C#泛型接口的協(xié)變和逆變

    本文詳細(xì)講解了C#泛型接口的協(xié)變和逆變,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C#簡(jiǎn)單獲取時(shí)間差的小例子

    C#簡(jiǎn)單獲取時(shí)間差的小例子

    C#簡(jiǎn)單獲取時(shí)間差的小例子,需要的朋友可以參考一下
    2013-04-04
  • 通過(guò)C#編寫(xiě)一個(gè)簡(jiǎn)易的Windows截屏增強(qiáng)工具

    通過(guò)C#編寫(xiě)一個(gè)簡(jiǎn)易的Windows截屏增強(qiáng)工具

    在使用?Windows?系統(tǒng)的截屏快捷鍵?PrintScreen?截屏?xí)r,如果需要把截屏保存到文件,需要先粘貼到畫(huà)圖工具然后另存為文件。所以本文用C#編寫(xiě)了一個(gè)簡(jiǎn)易的Windows截屏增強(qiáng)工具,需要的可以參考一下
    2022-05-05
  • C#開(kāi)啟線(xiàn)程的四種方式示例詳解

    C#開(kāi)啟線(xiàn)程的四種方式示例詳解

    今天小編就為大家分享一篇關(guān)于C#開(kāi)啟線(xiàn)程的四種方式示例詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • C#中重載與重寫(xiě)區(qū)別分析

    C#中重載與重寫(xiě)區(qū)別分析

    這篇文章主要為大家詳細(xì)介紹了C#中重載與重寫(xiě)的區(qū)別,感興趣的小伙伴們可以參考一下
    2016-02-02
  • C#實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的方法

    C#實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的方法,通過(guò)封裝的類(lèi)文件實(shí)例化調(diào)用實(shí)現(xiàn)了對(duì)身份證號(hào)碼的驗(yàn)證,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11
  • C#中神器類(lèi)BlockingCollection的實(shí)現(xiàn)詳解

    C#中神器類(lèi)BlockingCollection的實(shí)現(xiàn)詳解

    如果你想玩轉(zhuǎn)C#?里面多線(xiàn)程,工廠模式,生產(chǎn)者/消費(fèi)者,隊(duì)列等高級(jí)操作,就可以和我一起探索這個(gè)強(qiáng)大的線(xiàn)程安全提供阻塞和限制功能的C#神器類(lèi)BlockingCollection吧
    2023-02-02
  • WPF中實(shí)現(xiàn)彈出進(jìn)度條窗口的示例詳解

    WPF中實(shí)現(xiàn)彈出進(jìn)度條窗口的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何WPF中實(shí)現(xiàn)彈出進(jìn)度條窗口,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C#使用對(duì)象序列化類(lèi)庫(kù)MessasgePack

    C#使用對(duì)象序列化類(lèi)庫(kù)MessasgePack

    這篇文章介紹了C#使用對(duì)象序列化類(lèi)庫(kù)MessasgePack的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

乾安县| 岚皋县| 汉沽区| 丰都县| 景洪市| 新干县| 曲松县| 肃宁县| 任丘市| 龙海市| 耒阳市| 禹州市| 兴海县| 武隆县| 噶尔县| 海盐县| 宕昌县| 南丰县| 天全县| 嘉鱼县| 宁强县| 游戏| 宁南县| 彭水| 汝城县| 青海省| 沙雅县| 图木舒克市| 芮城县| 天等县| 华亭县| 南召县| 加查县| 盱眙县| 黄平县| 三亚市| 黔东| 错那县| 平谷区| 阿克陶县| 定安县|