順列

permutation.png

Tex

{}_n\mathrm{P}_r

(1)
\begin{align} {}_n\mathrm{P}_r=\frac{n!}{(n-r)!} \end{align}

順列を求めるソースコード

private double permutation(int _n,int _r){
        double numerator=1;//分子
        double denominator=1;//分母
        for(int i=_n;i>0;i--){
            numerator*=(double)i;
        }
        for(int i=_n-_r;i>0;i--){
            denominator*=(double)i;
        }
        if(numerator<denominator){
            System.out.println("失敗 n="+_n+" r="+_r);
            return -1;}
 
        return (numerator/denominator);
    }

misc

#include <iostream>
#include <vector>
#include <algorithm>
#include <Windows.h>
#include <mmsystem.h>
#pragma comment(lib,"WinMM.Lib")
using namespace std;
int main(){
    unsigned long system_time_before= timeGetTime();
    //これらの組み合わせは全部で何通り?
int input[]={0,1,2,3};
 vector<int> data(input,input+(sizeof(input)/sizeof(input[0])));
  // 全ての順列を出力
 int c=0;
 while(next_permutation(data.begin(), data.end())){
   cout << "[ " << data[0];
    for(unsigned int i=1; i<data.size(); ++i){
      cout << ", " << data[i];
    }
    cout << " ]" << endl;
    c++;
  }
 printf("全部で%d通りの組み合わせ\n",c);
 unsigned long system_time_after= timeGetTime();
 unsigned long calc_time=system_time_after-system_time_before;
 cout<<"かかった時間"<<calc_time/1000<<""<<endl;
  return 0;
}

probability

サポートサイト Wikidot.com probability