微軟100題(67)判斷撲克牌順子否和擲骰子

2021-07-03 01:54:17 字數 1560 閱讀 8244

1.撲克牌的順子

從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。

2-10為數字本身,a為1,j為11,q為12,k為13,而大小王可以看成任意數字。

2.n個骰子的點數。

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

列印出s的所有可能的值出現的概率。

1:思路:先把輸入轉換成數字儲存起來,其中大小王存為0,然後排序,統計0的個數,以及數字之間間隔的距離,2和3間距為0,若總的間距小於等於0的個數,則可以組成順子,否則不能,注意計算間距的時候,若前後兩個數字一樣,即原來牌裡面有對子(王除外),顯然不是順子

bool iscontinus(vectorinput)

sort(number.begin(),number.end());

int count_zero = 0;

int count_gap = 0;

vector::iterator iter2 =number.begin();

for (;iter2!=number.end() && *iter2==0;iter2++)

count_zero++;

iter2++;

for (;iter2!=number.end();iter2++)

if(count_gap<=count_zero)

return true;

else

return false;

}

2.參考

s所有可能的值n——6n

f(k, n) 表示k個骰子點數和為n的種數,k表示骰子個數,n表示k個骰子的點數和                  

f(k-1, n-6) + f(k-1, n-5) + f(k-1, n-4) + f(k-1, n-3) + f(k-1, n-2) + f(k-1, n-1) 對於 k > 0, k <= n <= 6*k 

/    

f(k, n) =        

\   0     

對於 n < k or n > 6*k        

當k=1時, f(1,1)=f(1,2)=f(1,3)=f(1,4)=f(1,5)=f(1,6)=1。           

從上面公式可以看出,k個骰子點數和為n的種數只與k-1個骰子的和有關。這就可以用到備忘錄的方法,用一張**儲存已解決的子問題的解,然後自底向上填表。考慮到當前層的計算只與下一層有關,因此只需儲存一行。

const int face_num = 6; //骰子的面數

//函式功能 : n個骰子的點數

//函式引數 : number為骰子數

//返回值 : 無

void printsumprobabilityofdices(int number)

} //不可能的情況,即i個骰子的和不可能小於i

for(j = i - 1;j >= 0; j--)

psum[j] = 0;

} //列印結果

for(i = 0; i <= size; i++)

cout<<"sum = "<

刷題 撲克牌順子

ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,決定大 小...

OJ題 撲克牌順子

題目描述 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,...

撲克牌順子

ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,決定大 小...