Time of Update: 2017-01-18
問題描述:輸入一個正整數數組,將它們串連起來排成一個數,輸出能排出的所有數字中最小的一個。例如輸入數組{32, 321},則輸出這兩個能排成的最小數字32132。請給出解決問題的演算法,並證明該演算法。 思路:先將整數數組轉為字串數組,然後字串數組進行排序,最後依次輸出字串數組即可。這裡注意的是字串的比較函數需要重新定義,不是比較a和b,而是比較ab與 ba。如果ab < ba,則a <
Time of Update: 2017-01-18
問題描述:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。輸入一個排好序的數組的一個旋轉,輸出旋轉數組的最小元素。例如數組{3, 4, 5, 1, 2}為{1, 2, 3, 4, 5}的一個旋轉,該數組的最小值為1。
Time of Update: 2017-01-18
求兩個正整數的最大公約數 思路:這是一個很基本的問題,最常見的就是兩種方法,輾轉相除法和輾轉相減法。通式分別為 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) (x >=y > 0)。根據通式寫出演算法不難,這裡就不給出了。這裡給出《編程之美》上的演算法,主要是為了減少迭代的次數。 對於x和y,如果y = k * y1, x= k * x1
Time of Update: 2017-01-18
字串問題是面試中經常出現的問題,這類問題有很多,難以不一。下面是幾道字串的題目,網上都能找到解答,自己實現了一下,供網友參考。感覺演算法重要的是要有正確的思路,實現起來不是問題。自己一定要多思考,這樣收穫可能會更多一點。 問題1:找兩個字串的最長公用子串。
Time of Update: 2017-01-18
按層次遍曆二元樹問題描述:輸入一顆二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印。 例如輸入: 8 / / 6 10/ / / /5 7 9 11輸出8 6 10 5 7 9 11 定義二元樹(其實是二元搜尋樹,但並不遍曆演算法)的結點為:struct BSTreeNode { int value; BSTreeNode *left;
Time of Update: 2017-01-18
所謂排序,就是要整理檔案中的記錄,使之按關鍵字遞增(或遞減)次序排列起來。其確切定義如下: 輸入:n個記錄R1,R2,…,Rn,其相應的關鍵字分別為K1,K2,…,Kn。 輸出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。
Time of Update: 2017-01-18
Tcp多線程伺服器和用戶端程式伺服器程式:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#define PORT 8082#define BUFSIZE 512char buf[
Time of Update: 2017-01-18
應用中,經常需要將字串壓縮成一個整數,即字串散列。比如下面這些問題:(1)搜尋引擎會通過記錄檔把使用者每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255位元組。請找出最熱門的10個檢索串。(2)有一個1G大小的一個檔案,裡面每一行是一個詞,詞的大小不超過16位元組,記憶體限制大小是1M。返回頻數最高的100個詞。(3)有10個檔案,每個檔案1G,每個檔案的每一行存放的都是使用者的query,每個檔案的query都可能重複。要求你按照query的頻度排序。(4)給定a、b兩個檔案,各
Time of Update: 2017-01-18
二分尋找演算法的思想很簡單,《編程珠璣》中的描述: 在一個包含t的數組內,二分尋找通過對範圍的跟綜來解決問題。開始時,範圍就是整個數組。通過將範圍中間的元素與t比較並丟棄一半範圍,範圍就被縮小。這個過程一直持續,直到在t被發現,或者那個能夠包含t的範圍已成為空白。 Donald Knuth在他的《Sorting and
Time of Update: 2017-01-18
一般開發過遊戲的都知道Lua和C++可以很好的結合在一起,取長補短,把Lua指令碼當成類似動態連結程式庫來使用,很好的利用了指令碼開發的靈活性。而作為一門流行的通用型指令碼語言Python,也是可以做到的。在一個C++應用程式中,我們可以用一組外掛程式來實現一些具有統一介面的功能,一般外掛程式都是使用動態連結程式庫實現,如果外掛程式的變化比較頻繁,我們可以使用Python來代替動態連結程式庫形式的外掛程式(堪稱文本形式的動態連結程式庫),這樣可以方便地根據需求的變化改寫指令碼代碼,而不是必須重新
Time of Update: 2017-01-18
1.建檔案夾int _mkdir(const char *path,mode_t mode);函數名: _mkdir功 能: 建立一個目錄用 法: int _mkdir( const char *dirname );標頭檔庫:direct.h傳回值:建立一個目錄,若成功則返回0,否則返回-1=====================================================2.開啟檔案fopen()函數功能: 開啟一個檔案函數原型:FILE * fopen(const
Time of Update: 2017-01-18
職責鏈模式:使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。其思想很簡單,比如考慮員工要求加薪。公司的管理者一共有三級,總經理、總監、經理,如果一個員工要求加薪,應該向主管的經理申請,如果加薪的數量在經理的職權內,那麼經理可以直接批准,否則將申請上交給總監。總監的處理方式也一樣,總經理可以處理所有請求。這就是典型的職責鏈模式,請求的處理形成了一條鏈,直到有一個對象處理請求。給出這個例子的UML圖。UM
Time of Update: 2017-01-18
fseek函數:int fseek(FILE * _File, long _Offset, int _Origin);
Time of Update: 2017-01-18
記憶體四區1、代碼區代碼區code,程式被作業系統載入到記憶體的時候,所有的可執行代碼都載入到代碼區,也叫程式碼片段,這塊記憶體是不可以在運行期間修改的。2、靜態區所有的全域變數以及程式中的靜態變數都儲存到靜態區。3、棧區棧stack是一種先進後出的記憶體結構,所有的自動變數,函數的形參都是由編譯器自動放出棧中,當一個自動變數超出其範圍時,自動從棧中彈出。對於自動變數,什麼時候入棧,什麼時候出棧,是不需要程式控制的,由C語言編譯器。實現棧不會很大,一般都是以K為單位的。當棧空間以滿,但還往棧記憶
Time of Update: 2017-01-18
(一)非遞迴全排列演算法基本思想是: 1.找到所有排列中最小的一個排列P. 2.找到剛剛好比P大比其它都小的排列Q, 3.迴圈執行第二步,直到找到一個最大的排列,演算法結束.下面用數學的方法描述:給定已知序列 P = A1A2A3An ( Ai!=Aj , (1<=i<=n , 1<=j<=n, i != j )
Time of Update: 2017-01-18
複製代碼 代碼如下:<P>不論是哪種全排列產生演算法,都遵循著“原排列”→“原中介數”→“新中介數”→“新排列”的過程。</P><P>其中中介數依據演算法的不同會的到遞增進位制數和遞減進位制數。</P><P>關於排列和中介數的一一對應性的證明我們不做討論,這裡僅僅給出了排列和中介數的詳細映射方法。</P>· 遞增進位制和遞減進位制數
Time of Update: 2017-01-18
printf 可能是許多程式員在開始學習C語言時接觸到的 第二個函數(我猜第一個是main),說起來,自然是老朋友了,可是,你對這個老朋友瞭解多嗎?你對它的那個孿生兄弟sprintf瞭解多嗎?在將各種類 型的資料構造成字串時,sprintf的強大功能很少會讓你失望。由於sprintf跟printf在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直接在命令列上輸出。這也導致sprintf比printf有用得多。所以本文著重介紹sprintf,有時也穿插著用用
Time of Update: 2017-01-18
題目:一個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少種跳法,並分析演算法的時間複雜度。答:用一個函數f(n)來表示n級台階總的跳法。1、只有1個台階,則f(1) = 1;2、有2個台階,則f(2) = 2;3、當有n個台階時,如果第一次跳1級,有f(n-1)種跳法,如果第一次跳2級,有f(n - 2)種跳法,即f(n) = f(n-1) + f(n-2)。即為Fibonacci序列。複製代碼 代碼如下:#include "stdafx.h"#include
Time of Update: 2017-01-18
每當想找哪個運算子優先順序高時,很多時候總是想找的就沒有,真讓人氣憤!現在,終於有個我個人覺得非常全的,分享給大家,歡迎拍磚!C語言運算子優先順序優先順序運算子名稱或含義使用形式結合方向說明1[]數組下標數組名[常量運算式]左到右--()圓括弧(運算式)/函數名(形參表)--.成員選擇(對象)對象.成員名--->成員選擇(指標)對象指標->成員名-- 2-負號運算子-運算式右到左單目運算子~按位取反運算子~運算式++自增運算子++變數名/變數名++--自減運算子--變數名/
Time of Update: 2017-01-18
題目:寫一個函數,求兩個整數的之和,要求在函數體內不得使用+、-、×、÷。 分析:這又是一道考察發散思維的很有意思的題目。當我們習以為常的東西被限制使用的時候,如何突破常規去思考,就是解決這個問題的關鍵所在。看到的這個題目,我的第一反應是傻眼了,四則運算都不能用,那還能用什麼啊?可是問題總是要解決的,只能開啟思路去思考各種可能性。首先我們可以分析人們是如何做十進位的加法的,比如是如何得出5+17=22這個結果的。實際上,我們可以分成三步的:第一步只做各位相加不進位,此時相加的結果是12(個位元5