程式設計師面試寶典
面試例題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...