小朋友學演算法(7):求排列數
程式:
#include <iostream>
using namespace std;
typedef long long ll;
ll permutation(ll n, ll k)
{
if(0 == k)
{
return 1;
}
return permutation(n, k - 1) * (n - k + 1);
}
int main()
{
cout << permutation(10, 3) << endl;
return 0;
}
執行結果:
720
分析:
P(10, 3)
= P(10, 2) * 8
= P(10, 1) * 9 * 8
= P(10, 0) * 10 * 9 * 8
= 1 * 10 * 9 * 8
= 720
更多內容請關注微信公眾號
相關推薦
小朋友學演算法(7):求排列數
程式: #include <iostream> using namespace std; typedef long long ll; ll permutation(ll n, l
小朋友學演算法(15):計算年份的天干地支
十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸; 十二地支:子、醜、寅、卯、辰、巳、午、未、申、酉、戌、亥。 天干地支紀年法首先是天干在前,地支在後,比如今年2018就是戊戌年。 天干演算法: 4、5、6、7、8、9、0、1、2、3對應的十天干就是 甲、乙、丙、丁、戊、己、庚、辛
前端學演算法(一):印象
資料結構與演算法JavaScript描述,寫得很棒,近來閱讀之後,對資料結構與演算法有了全新的瞭解。回頭再去看C語言描述的資料結構和演算法,感覺親切了很多。 作為一名Web前端,目前用到演算法的地方不多,正因為這樣就更加要學好資料結構與演算法。不然,等以後還是一年經驗n年
小朋友學數學(22):三角函式
一、定義 在上面這個直角三角形裡,C為直角,A, B為非直角,角C對應的斜邊為c,角B對應的直角邊為b,角A對應的直角邊為a。 定義: 正弦值為對邊的值比斜邊的值,記為sin 餘弦值為鄰邊的值比斜邊的值,記為cos 正切值為對邊的值比鄰邊的值,記為tan 餘切
小朋友學Python(4):縮排
學習 Python 與其他語言最大的區別就是,Python 的程式碼塊不使用大括號 {} 來控制類,函式以及其他邏輯判斷。python 最具特色的就是用縮排來寫模組。 縮排的空白數量是可變的,但是所有程式碼塊語句必須包含相同的縮排空白數量,這個必須嚴格執行
小朋友學C++(3):類與物件
(一)類與物件 類是由我們根據客觀事物抽象而成,形成一類事物,然後用類去定義物件,形成這類事物的具體個體。 比如小狗是一個類,你家的“旺財”則是小狗一個具體的物件。 (二)屬性與方法 一般把類的資料成員稱為類的屬性,把類的函式成員稱為方法。 比如小
小白學 Python(7):基礎流程控制(上)
人生苦短,我選Python 前文傳送門 小白學 Python(1):開篇 小白學 Python(2):基礎資料型別(上) 小白學 Python(3):基礎資料型別(下) 小白學 Python(4):變數基礎操作 小白學 Python(5):基礎運算子(上) 小白學 Python(6):基礎運算子(下)
演算法君帶你學演算法(1):最長迴文字串
演算法君:小白同學,給你出道演算法題,看你小子演算法能力有沒有長進。 演算法小白:最近一直在研究演算法,刷了很多演算法題,正好活動活動大腦,來來來,趕快出題! 演算法君:聽好了,題目是:求一個字串中最長的迴文字串。 演算法小白:這個演算法好像很簡單,就是有一個概念不太明白,啥叫“迴文字串&r
小朋友學經典演算法(14):回溯法和八皇后問題
一、回溯法 回溯法(探索與回溯法)是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 二、八皇后問題 (一)問
小朋友學C語言(32):求圓周率
(一)圓周率簡介 圓周率(Pi)是圓的周長與直徑的比值,一般用希臘字母π表示,是一個在數學及物理學中普遍存在的數學常數。π也等於圓形之面積與半徑平方之比。是精確計算圓周長、圓面積、球體積等幾何形狀的關鍵值。 圓周率是一個無理數,即無限不迴圈小數。在日常生活中
大學生學程式設計(十):資料結構與演算法的基本概念
為啥扯淡,因為我們開發人員很少用到它,目前流行的android開發有資料結構麼?沒有,至少你在用api的時候基本上是看不見的。c++有在STL基本容器中string, vector, list, deque, map等。人家都已經實現且以近完美,我們學它有啥用有必要嗎? 這個爭論由來已久
演算法快學筆記(五):散列表
1. 介紹 當需要根據給定的值需要快速得到想要值的時候,散列表是一個非常有用的資料結構,假設你在一家雜貨店上班。有顧客來買東西時,你得在一個本子中查 找價格,如果本子的內容不是按字母順序排列的,你可以使用簡單查詢法,從頭到尾以一個一個的找,時間複雜度為O(n),如果本子的內容是按字母順序
演算法快學筆記(四):快速排序的原理與實現
1. 原理介紹 快速排序是一種排序演算法,速度比選擇排序快得多,其主要基於“分而治之”的思想對集合進行排序,本文將對該演算法進行分析。 2. 分而治之(D&C)的思想 D&C主要指利用遞迴的方式來不斷的縮小需要處理問題的規模,最終使問題容易解決。使用D&C
演算法快學筆記(三):選擇排序的原理與實現
1. 原理介紹 選擇排序是個簡單的排序,思路主要通過多次遍歷待排序的集合,每次彈出最大/小值並放入新的集合,直到原始集合為空。舉個例子: 假設要對A=[1,2,5,9,3]按照升序的方式進行排序,步驟與結果如下 從A中找出最大值,將其pop,並放入B中,執行後的結果如下:
演算法快學筆記(二):陣列與連結串列
1. 說明 當程式需要將資料儲存到記憶體時,計算機會給你一個儲存地址。需要存 儲多項資料時,有兩種基本方式——陣列和連結串列。但它們並非都適用於所有的情形,因此知道它們的特性很重要。本文將對陣列與連結串列的原理與優缺點進行總結。 2. 陣列 使用陣列儲存多個元素的時候,陣列中元素
演算法快學筆記(一):演算法入門
1. 演算法的定義 “演算法”一詞在不同的書籍以及網站上可能會存在一些差異,但是下面的定義個人覺得最為貼切: 1. 演算法代表著用系統的方法描述解決問題的策略機制 2. 能夠對一定規範的輸入,在有限時間內獲得所要求的輸出 3. 一個演算法的優劣可以用空間複雜度與時間複雜度來衡量
淺談演算法和資料結構(7):二叉查詢樹
前文介紹了符號表的兩種實現,無序連結串列和有序陣列,無序連結串列在插入的時候具有較高的靈活性,而有序陣列在查詢時具有較高的效率,本文介紹的二叉查詢樹(Binary Search Tree,BST)這一資料結構綜合了以上兩種資料結構的優點。 二叉查詢樹具有很高的靈活性
機器學習回顧篇(7):決策樹演算法(ID3、C4.5)
注:本系列所有部落格將持續更新併發布在github上,您可以通過github下載本系列所有文章筆記檔案。 1 演算法概述¶
小白學 Python 爬蟲(7):HTTP 基礎
人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門 小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門 小白學 Pyth
小白學 Python 資料分析(7):Pandas (六)資料匯入
人生苦短,我用 Python 前文傳送門: 小白學 Python 資料分析(1):資料分析基礎 小白學 Python 資料分析(2):Pandas (一)概述 小白學 Python 資料分析(3):Pandas (二)資料結構 Series 小白學 Python 資料分析(4):Pandas (三)資