程式設計師面試寶典 8 3 打靶

2021-04-14 15:46:23 字數 3272 閱讀 3687

程式設計師面試寶典

面試例題1乙個射擊運動員打靶,靶一共有

10環,連開

10槍打中

90環的可能性有多少種?請用遞迴演算法程式設計實現。

[中國某著名通訊企業

h面試題

]

解析:靶上一共有

10種可能——1環到

10環,還有可能脫靶,那就是

0環,加在一起共

11種可能。這是一道考迴圈和遞迴的面試題。我們在這個程式中將利用遞迴的辦法實現打靶所有可能的演示,並計算出結果。讀者會問,難道一定要使用遞迴?當然不是。我們也可以連續用

10個迴圈語句來表示程式,**如下:

for (i1=0;i1<=10;i1++)

......

} }

} 但是,上面的迴圈程式雖然解決了問題,但時間複雜度和空間複雜度無疑是很高的。比較好的辦法當然是採用遞迴的方式,事實上公司也就是這麼設計的。遞迴的條件由以下

4步完成:

(1)如果出現這種情況,即便後面每槍都打

10環也無法打夠總環數

90,在這種情況下就不用再打了,則退出遞迴。**如下:

if(score < 0 || score > (num+1)*10 )//

次數num為0

~9 (

2)如果滿足條件且打到最後一次(因為必須打

10次),**如下:

if(num == 0)

(3)如果沒有出現以上兩種情況則執行遞迴,**如下:

for(int i = 0; i <= 10; ++i) (

4)列印函式,符合要求的則把它列印出來。**如下:

public static void output(int store2)

",store2[i]);

} console.writeline();

sum++;

}答案:

用c#

編寫的完整**如下:

using system ;

public class m ;

}

//列印函式

//符合要求的則把它列印出來

public static void output(int store2)

",store2[i]);

} console.writeline();

sum++;

} //

計算總數,返回

sum值

public static int sum2()

publicstatic void cumput(int score, int num, int store2 )

//如果滿足條件且達到最後一層

if(num == 0)

for(int i = 0; i <= 10; ++i)

//console.write("",store2[5]);

} }

",store[3]);

//cout<<"

總數:"<

console.write("

總數:",sum);

} }

程式結果一共有

92 378

種可能。

也可以用

c++編寫,**如下:

#include

using namespace std;

int sum;

int store[10];

void output()

cout<

++sum; }

void cumput(int score, int num)

for(int i = 0; i <= 10; ++i) }

int main(int argc, char* argv)

面試例題

2八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是

19世紀著名的數學家高斯

1850

年提出:在8×

8格的西洋棋盤上擺放

8個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

[英國某著名計算機圖形影象公司面試題

]

解析:遞迴實現

n皇后問題。

演算法分析:

陣列a、b

、c分別用來標記衝突,

a陣列代表列衝突,從

a[0]~a[7]

代表第0

列到第7

列。如果某列上已經有皇后,則為

1,否則為0。

陣列b代表主對角線衝突,為

b[i-j+7]

,即從b[0]~b[14]

。如果某條主對角線上已經有皇后,則為

1,否則為0。

陣列c代表從對角線衝突,為

c[i+j]

,即從c[0]~c[14]

。如果某條從對角線上已經有皇后,則為

1,否則為0。

**如下:

#include

static char queen[8][8];

static int a[8];

static int b[15];

static int c[15];

static int iqueennum=0; //

記錄總的棋盤狀態數

void qu(int i); //引數i

代表行

int main()

//主、從對角線標記初始化,表示沒有衝突

for(iline=0;iline<15;iline++)

b[iline]=c[iline]=0;

qu(0);

return 0; }

void qu(int i)

printf("/n/n"); }

//如果前次的皇后放置導致後面的放置無論如何都不能滿足要求,則回溯,重置

queen[i][icolumn]='*';

a[icolumn]=0;

b[i-icolumn+7]=0;

c[i+icolumn]=0;

} } }  

程式設計師面試寶典

據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...

《程式設計師面試寶典》摘記

簡歷注意事項 1.簡歷不要太長 中文簡歷壓縮在 2頁左右就可以把所有的內容突出了。一般來說學習經歷應該從大學開始寫起。2.如實填寫。3.不要過分謙虛,不要把自己的一切包括弱項都寫進去。4.求職簡歷上一定要註明求職的職位。根據所申請的職位來設計,突出你在這方面的優點。編寫乙份或者幾份有針對性的簡歷。5...

程式設計師面試寶典一

1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...