程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成分列組合算法完全實例

C#完成分列組合算法完全實例

編輯:C#入門知識

C#完成分列組合算法完全實例。本站提示廣大學習愛好者:(C#完成分列組合算法完全實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成分列組合算法完全實例正文


分列組合是罕見的數學成績,本文就以完全實例情勢講述了C#完成分列組合算法的辦法。分享給年夜家供年夜家參考之用。詳細辦法以下:

起首,數學中分列組合,可表現為:分列P(N,R)

其實分列完成了,組合也就完成了,組合C(N,R)就是P(N,R)/P(R,R) ,完成這一功效比擬簡略的是遞歸算法,但斟酌到遞歸的機能,上面采取了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>  
    /// 分列輪回辦法  
    /// </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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁: