只要執行檔名含有 instal,無論位於哪個位置都會被視為安裝程式,不會用一般程式的方式啟動,害我抓 bug 抓了老半天
jhfcaginstalhfhgfg.exe 這個不是一般程式
2018年4月8日 星期日
2018年4月5日 星期四
nPr 排列法
這方法會比旋轉要來得快
#include <functional> // std::function #include <memory> // std::shared_ptr #include <vector> #include <iostream> using namespace std; // n 取 r 做排列 // 採用逆時旋轉排列法 // 必須 n >= r class Permutation_nPr { // 回報結果 function<void(const shared_ptr<vector<unsigned char> > &, size_t)> m_Report; // 放置要排列的數字 shared_ptr <vector<unsigned char> > m_Digital_Array; // 要做排列的數目值 size_t m_r; void v(size_t n, size_t r) { if (r == 0) m_Report(m_Digital_Array, m_r); else v(n - 1, r - 1); for (size_t j = n; j > 0; --j) { { unsigned char tmp = m_Digital_Array->at(n); m_Digital_Array->at(n) = m_Digital_Array->at(j-1); m_Digital_Array->at(j - 1) = tmp; } if (r == 0) m_Report(m_Digital_Array, m_r); else v(n - 1, r - 1); { unsigned char tmp = m_Digital_Array->at(n); m_Digital_Array->at(n) = m_Digital_Array->at(j-1); m_Digital_Array->at(j - 1) = tmp; } } } public: Permutation_nPr( const function<void(const shared_ptr<vector<unsigned char> > &, size_t)> &Receive ):m_Report(Receive) {} void nPr(size_t n, size_t r) { m_r = r; m_Digital_Array = shared_ptr<vector<unsigned char> >(new vector<unsigned char>(n)); size_t i = n; while (i--) { m_Digital_Array->at(i) = i; } v(n - 1, r - 1); } }; class MsgShow { int N{1}; public: void ResetN(){N = 1;} void operator()( const shared_ptr<vector<unsigned char> > &Digital_Array, size_t r) { cout << N << ":\t"; for (size_t i = Digital_Array->size() - 1; r > 0; --i, --r) cout << (int)Digital_Array->at(i) << ' '; cout << endl; ++N; } }; int main() { MsgShow Report; Permutation_nPr P(Report); cout << '\n' << "4P3 排列:" << endl; Report.ResetN(); P.nPr(4,3); return 0; }
訂閱:
文章 (Atom)