某大公司的一道面試邏輯題

2021-06-02 08:52:53 字數 1038 閱讀 9372

去面某大公司被問了一道題,現在有n(n是偶數且要符合某個規則)個球,然後有2個人a和b,他們每次能摸的球的數目呢是2 , 4, 8個,現在問如果a先摸球,如何讓a100%獲勝.

當時時間太緊,並且緊張沒能想出來,今天重新整理思路把這題給做了出來

這道題呢要把球分解一下,分解成p個4球 和 q個2球的組合,由於n是偶數所以必定能分解,且分解後q最多為1(優先分配4球)

為何要這樣分解呢,我們可以考慮一下如何才能獲勝,要獲勝那麼也就是必定要讓你摸完倒數第二次之後,對方不可能一次摸完餘下的球

對方在什麼情況不可能摸完餘下所有的球呢?

當a摸完之後,可能有如下情況

1:剩餘6個球 = p+q(此時b只能摸2個,不允許一次摸6個這種情況存在,所以a摸4個就可以獲勝)

2:剩餘10個球 = 2p + q(此時b若摸2或者8個,則a摸8個或者4個獲得勝利;若b摸4個,剩餘剩餘6個,則a輸)

3:剩餘12個球 = 3p(b摸2個,則跳到情況2,這裡要注意,跳到2之後就變成a摸球了,所以a可以摸4個讓b輸,則b輸;摸4和8個仍就是b輸;)

發現只要a摸完後剩餘的球帶有p+q組合的即6的組合的,b就無法獲勝,現在我的目的就簡單了,我只需要每次總是讓摸完後剩餘的球是6的倍數就可以了

到這裡我們知道了 球的總數不能為6的倍數,否則a就沒有辦法100%獲勝

void pickball_game(int sum)

srand(int(time(0)));

int b = ;//每次取球的個數

//a第乙個摸球,第乙個摸球就能掌控全域性

cout << "當前一共有" << sum <<"個球,遊戲開始" << endl;

while(sum)

int t = rand()%3;

while(sum < b[t]) t = rand()%3;

sum -= b[t];

cout << ",b摸了"<< b[t] << "個球";

cout << ",還剩" << sum << "個球" << endl;

}}

一道邏輯題

前幾天在網上看到一道題目 將54張撲克牌按照某種次序進行排列,然後取出第一張放至底部,然後將現在的第一張翻開拿出來,不斷迴圈,直至手中沒有撲克牌,而且拿出撲克牌的順序依次是紅心a k 方片a k 黑桃a k 梅花a k 大王 小王。這道題目讓我想起了小時候老爸給我出的題目,取一幅撲克牌同花色的a k...

大公司的PHP面試題

1.禁用cookie 後 seesion 還能用嗎?2.抓取遠端到本地,你會用什麼函式?4.你覺得在pv10w的時候,同等配置下,lunix 比win快多少?5.簡述post 和get傳輸的最大容量分別是多少?6.用最少的 寫乙個求3值最大值的函式.回覆 2 樓 2015 01 26 以下是部分答案...

一道邏輯思維題

新聞上新加坡一道為十五六歲學生設計的奧數題被人放上網,不料惹得西方國家網民絞盡腦汁爭相答題。許多人驚呼,新加坡孩子竟然要做這麼難的數學題啊!值得注意的是,英國 美國等西方國家網民普遍震驚,而一些亞洲國家網民則相對淡定。對這一現象,不少人表示 只能呵呵!對於多年不動腦筋的學渣試著理解一下先 alber...