欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

其實排列實現(xiàn)了,組合也就實現(xiàn)了,組合C(N,R)就是P(N,R)/P(R,R) ,實現(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#程序設計有所幫助。

相關文章

  • C#在Excel表格中插入、編輯和刪除批注

    C#在Excel表格中插入、編輯和刪除批注

    這篇文章主要為大家詳細介紹了C#如何在Excel表格中插入、編輯和刪除批注,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C#使用Matrix執(zhí)行縮放的方法

    C#使用Matrix執(zhí)行縮放的方法

    這篇文章主要介紹了C#使用Matrix執(zhí)行縮放的方法,實例分析了C#操作Matrix實現(xiàn)縮放的相關技巧,需要的朋友可以參考下
    2015-06-06
  • c# 刪除所有的空文件夾的小例子

    c# 刪除所有的空文件夾的小例子

    c# 刪除所有的空文件夾的小例子,需要的朋友可以參考一下
    2013-03-03
  • C#異步編程之async/await詳解

    C#異步編程之async/await詳解

    異步這個概念在不同語境下有不同的解釋,不同的編程語言有不同異步編程方法,在C#語言中,常常使用async/await等關鍵字,和Task等類來實現(xiàn)異步編程。本文就來和大家聊聊async與await吧
    2023-03-03
  • 基于WPF開發(fā)txt閱讀器

    基于WPF開發(fā)txt閱讀器

    這篇文章主要為大家詳細介紹了如何基于WPF開發(fā)一個簡單的txt閱讀器,可以滿足文本文件的讀寫和保存,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-06-06
  • C#編程實現(xiàn)連接SQL SERVER數(shù)據庫實例詳解

    C#編程實現(xiàn)連接SQL SERVER數(shù)據庫實例詳解

    這篇文章主要介紹了C#編程實現(xiàn)連接SQL SERVER數(shù)據庫的方法,以實例形式較為詳細的分析了C#連接SQL SERVER數(shù)據庫的相關步驟與具體實現(xiàn)技巧,需要的朋友可以參考下
    2015-11-11
  • C#動態(tài)編譯并執(zhí)行字符串樣例

    C#動態(tài)編譯并執(zhí)行字符串樣例

    這篇文章主要為大家詳細介紹了C#動態(tài)編譯并執(zhí)行字符串樣例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#使用Word中的內置對話框實例

    C#使用Word中的內置對話框實例

    這篇文章主要介紹了C#使用Word中的內置對話框實例,包括了對話框的顯示方法及后期綁定具體用法,需要的朋友可以參考下
    2014-10-10
  • C#執(zhí)行表達式樹(Expression Tree)的具體使用

    C#執(zhí)行表達式樹(Expression Tree)的具體使用

    本文將深入探討表達式樹的基本概念、創(chuàng)建方法、修改和刪除節(jié)點、查詢和遍歷技巧以及在C#中的應用示例,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C# 禁止應用程序多次啟動的實例

    C# 禁止應用程序多次啟動的實例

    經常我們會有這樣的需求,只讓應用程序運行一個實體,下面是實現(xiàn)的方法,有需要的朋友可以參考一下
    2013-09-09

最新評論