兩個閒玩娛樂 微軟面試100題 第六十七題

2021-06-27 02:11:36 字數 1618 閱讀 3664

題目要求:

1.撲克牌的順子

從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。2-10為數字本身,a為1,j為11,q為12,k為13,而大小王可以看成任意數字。

參考資料:劍指offer第44題。

2.骰子遊戲

n個骰子的點數。把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。

輸入n,列印出s的所有可能的值出現的概率。

參考資料:劍指offer第43題。

題目分析:

第一題:用0當王,輸入乙個陣列表示這些牌。

可以這樣:把陣列排序,統計陣列中0的個數,然後統計排序後的陣列中相鄰的數字之間的空缺總數。如果空缺總數小於或等於0的個數,那麼這個陣列就是連續的;反之則不連續。

還有一點:如果陣列中非0的數字重複出現,則肯定不連續。(即,如果一副牌裡含有對子,則不可能是順子。)

第二題:我們考慮用兩個陣列來儲存骰子點數的每乙個總數出現的次數。在一次迴圈中,第乙個陣列中的第n個數字表示骰子和為n出現的次數。在下一次迴圈中,我們加上乙個新的骰子,此時和為n的骰子出現的次數應該是上一次迴圈中骰子點數和為n-1、n-2、n-3、n-4、n-5和n-6的次數的總和,所以我們把另乙個陣列的第n個數字設為前乙個陣列對應的第n-1、n-2、n-3、n-4、n-5和n-6之和。

**實現:

第一題**:

#include #include using namespace std;

bool iscontinuous(int *nums,int len);

int main(void)

;// int nums = ;

if(iscontinuous(nums,7))

cout << "是順子" << endl;

else

cout << "不是順子" << endl;

return 0;

}bool iscontinuous(int *nums,int len)

第二題**:

#include #include using namespace std;

const int g_maxvalue = 6;

void printprobability(int num);

int main(void)

void printprobability(int num)

{ if(num<1)

return ;

int *p[2];

p[0] = new int[g_maxvalue*num+1];

p[1] = new int[g_maxvalue*num+1];

for(int i=0;i

微軟面試100題之第6題

給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數 要求下排每個數都是先前上排那十個數在下排出現的次數。上排的十個數如下 0,1,2,3,4,5,6,7,8,9 舉乙個例子,數值 0,1,2,3,4,5,6,7,8,9 分配 6,2,1,0,0,0,1,0,0,0 0在下排出現了6次,1...

和為s的兩個數字 微軟面試100題 第十四題

題目要求 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。例如輸入陣列和數字15.由於4 11 15,因此輸出4和11.參考資料 劍指offer第41題 題目分析 方法1 窮舉法 兩個for,時間複雜度o n 2 方法2 二分...

面試題 100個白球,100個黑球,每次取兩個

面試題 袋子裡有黑白球各100個,每次從袋子裡取2個球,若取的球顏色相同,則放入1個黑球,若不同,則放入1個白球。問 最後袋子裡剩下1個黑球的概率是多少?思路一 每次取球有3種情況 1 兩黑,此時放入1個黑球。黑球在袋子裡個數為奇數個,白球偶數個 2 兩白,此時放入1個黑球。黑球在袋子裡個數為奇數個...