題目要求:
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個黑球。黑球在袋子裡個數為奇數個...