1. 程式人生 > >C++演算法(1)

C++演算法(1)

第一篇

1.從n個數中等概率的輸出m個數

//從0,1,2....,n-1中隨機等概率的輸出m個不重複的數,每個數被輸出的概率都為m/n
void knuth(int n, int m)
{
	srand((unsigned int)time(0));
	for (int i = 0; i < n; i++) {
		if (rand()%(n-i)<m) {
			cout << i << endl;
			m--;
		}
	}
}

由這個for迴圈迴圈n次,且在滿足條件時才輸出i,可知,輸出m個不同值的要求已滿足,因為每次輸出的都是i值,而i值每次都是不一樣的。
在i=0時,rand()%(n-i)的取值範圍為0到n-1,共n個數,此時要輸出0只需要rand()%(n-i)小於m,故i=0被輸出的概率為m/n;
在i=1時,rand()%(n-i)的取值範圍為0到n-2,共n-1個數,若i=0沒有被輸出,則m–未被執行,此時i=1被輸出的概率為m/(n-1),若i=0已經被輸出了,則m變為m-1,此時i=1被輸出的概率為(m-1)/(n-1);由概率論的知識,可知此時i=1被輸出的概率為P=(1-m/n)(m/(n-1))+m/n

((m-1)/(n-1))=m/n;以此類推,可知每個數被輸出的概率都為m/n
輸入:

knuth(800, 20);

輸出

程式輸出

2.迭代進行質因數分解

void prim(int m, int n)
{
	if (m >= n)
	{
		while (m%n) n++;
		m/=n;
		prim(m, n);   //no.1
		cout << n << endl;  //no.2
	}
}

遞迴分解質因數,而且是從大到小輸出,改變no.1和no.2的順序,就可以從小到大輸出,這裡的固定為2
輸入:

prim(430, 2);

輸出
在這裡插入圖片描述

相關推薦

C++演算法1

第一篇 1.從n個數中等概率的輸出m個數 //從0,1,2....,n-1中隨機等概率的輸出m個不重複的數,每個數被輸出的概率都為m/n void knuth(int n, int m) { srand((unsigned int)time(0)); for

c++ 類1

blog mac main png urn std 操作 ring 對象 C++用類來描述對象,類是對現實世界中相似事物的抽象,同是“雙輪車”的摩托車和自行車,有共同點,也有許多不同點。“車”類是對摩托車、自行車、汽車等相同點的提取與抽象,如所示。 類的定義分為兩個部分:數

C++學習1:最大子段和多種解法

多少 問題: code namespace 數據 組成 amp using () 問題:給定由n個數(可能為負數)組成的序列a1,a2,a3,...,an,求該序列子段和的最大值。 第一種解法:(最容易考慮的方法,將所有的子段一一相加,然後比較) 1 #include&

C#基礎1

文檔 使用 忽略大小寫 read fault else ogr subst itop 摘要:學習c#已經有一段歷程了,回顧之前所打過的代碼以及筆記,做些常用的總結,希望以後工作中如果用到,方便查找。當然,個人首要目的是這樣,加深印象的同時,可以練習一下打字速

c練習題1字串操作練習題

1、有一個字串開頭或結尾含有n個空格(”   abcdefgdddd    ”),欲去掉前後空格,返回一個新字串。 要求1:請自己定義一個介面(函式),並實現功能;70分 要求2:編寫測試用例。30分 int trimSpace(char

Linux下一個最簡單的不依賴第三庫的的C程式1

如下程式碼是一段彙編程式碼,雖然標題中使用了C語言這個詞語,但下面確實是一段彙編程式碼,弄清楚了這個程式碼,後續的知識點才會展開。 #PURPOSE: Simple program that exits and returns a # status code back to the Lin

聚類演算法1

一聚類演算法簡介 1.聚類和分類的區別 聚類 - 利用演算法將相似或者相近的樣本聚成一簇,這些樣本都是無標籤的,是一種無監督學習演算法。 分類 - 首先需要從有標籤樣本學習出打標籤邏輯,再利用學習出的邏輯對無標籤樣本進行分類,是一種有監督學習演算法。 2.聚類的使用 聚類演

KMP 演算法1:如何理解 KMP

http://www.61mon.com/index.php/archives/183/ 系列文章目錄 KMP 演算法(1):如何理解 KMPKMP 演算法(2):其細微之處 一:背景TOC 給定一個主字串(以 S 代替)和模式串(以 P 代替),要

經典排序演算法1——氣泡排序演算法詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

貪心演算法1—— 活動安排問題 以及 電視節目問題 的區別

一、活動安排問題 #include <iostream> #include <algorithm> using namespace std; /* 題目型別:活動安排問題 特點:所有活動都需要進行,要求輸出所需的會場數 演算法:貪心演算法 注意

python資料結構與演算法1

資料結構與演算法(Python) Why?我們舉⼀個可能不太恰當的例⼦:如果將開發程式的過程⽐喻為作戰,我們碼農便是指揮作戰的將軍,⽽我們 所寫的程式碼便是⼠兵和武器。那麼資料結構和演算法是什麼?答⽈:兵法!我們可以不看兵法在戰場上⾁搏,如此,可能會勝利,可能會失敗。即使勝 利,可能也會付出巨⼤的代價。我們寫

簡單的演算法1--從尾到頭列印連結串列

目錄 1、java實現 1.1、遞迴 1.1.1、測試(完整原始碼) 1.2、利用棧來實現 1.2.1、測試 2、C語言 2.1、先將連結串列反轉,再從頭輸出(改變連結串列的結構) 2.2、利用棧的“先進後出”特性   1、java實現 連結

分散式一致性的基石---Paxos演算法1

分散式一致性的基石---Paxos演算法(1)   Paxos演算法是由微軟的工程師Lamport提出,Lamport依靠Paxos演算法獲得圖靈獎;   Paxos演算法旨在解決相互信任的分散式系統中,多個節點能快速達成一個一致的值;   目前,google的Chubby

資料結構與演算法1- 資料結構概覽

宣告:雖然本系列部落格與具體的程式語言無關。但是本文作者對c++相對比較熟悉,其次是java,所以難免會有視角上的偏差。舉例也大多是和這兩門語言相關。 今天先來看看有哪些常見的資料結構(C++ STL視角,其他應該也大同小異吧。哈哈,我猜的!)。所以之後的內容大多從STL出發,然後順便對比下ja

【JAVA面試】JAVA常考點之資料結構與演算法1

                            JAVA常考點之資料結構與演算法(1) JAVA常考點之資料結構與演算法 目錄

吳裕雄 python 機器學習-KNN演算法1

import numpy as np import operator as op from os import listdir def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0] diffMat

“藍橋杯”演算法大賽·入門演算法1

問題描述 斐波那契(Fibonacci)數列的遞推公式為:,其中。當比較大時,也非常大。現在我們想知道,除以10007的餘數是多少? 參考演算法 C++ #include <iostream> constexpr auto MOD = 10007; usi

C語言1

c語言 一丶知識點小結 1丶常量與變數 (1)常量與變數是C語言中處理資料的兩種形式。 (2)常量在程式執行中不可改變,而變數是可以改變的。 (3)賦值時用int,float,double,char等。 (4)使用變數時必須宣告,宣告變數必須在第一條可執行語句前

JAVA加密演算法1- 密碼學概述及BASE64演算法使用

密碼學綜述 密碼學綜述 密碼學基本功能 機密性、鑑別、報文完整性、不可否認性 基本模型 sender-->加密演算法 --> 密文 --> 解密演算法 --> receiver 金鑰源 密碼學演算法分類: 訊息編碼:Base64 訊息

Why Java Sucks and C# Rocks1:比較的意義與目的

訊息釋出之後,許多朋友都表示對我這個主題的關注——無論是正面還是負面的——這讓我很高興。不過說實話,我原本並沒有打算寫這篇文章。我原本的打算是從一開始就進行技術方面的討論,但是大家在前文的反饋讓我把一些問題想得更清楚了,也認識到有些東西可能需要先說在前面可以有更好的效果。希望各位朋友可以繼續給我一些反饋,這樣