C 魔術師發牌 解法思路

2021-09-05 12:37:14 字數 1192 閱讀 8577

1.魔術師發牌-問題**?

魔術師利用一副牌中的13張黑桃牌,預先將他們排好後疊放在一起,牌面朝下。對觀眾說:「我不看牌,只數數就可以猜到每張牌是什麼,我大聲數數,你們聽,不信?現場演示。」魔術師將牌堆最上面的那張排數為1,把他翻過來正好是黑桃a,將黑桃a從牌堆抽出放在桌子上,第二次數1、2,將第一張放在牌堆最下面,第二張翻開,正好是黑桃2,也將它抽出放在桌子上。這樣依次進行將13將牌全部翻出,準確無誤。問牌最開始的順序是怎樣排的。

簡單點說:

把13張牌按照一定的順序排好,然後依次取牌,將每次取到的牌放在最下面,情形如下:

數一次,取牌,黑桃1,放牌堆最下面

數兩次,取牌,黑桃2,放牌堆最下面

數三次,取牌,黑桃3,放牌堆最下面

數四次,取牌,黑桃4,放牌堆最下面

…直到取到最後的黑桃13(黑桃k),表演結束

2.我時昨天瀏覽網頁,無意中看到了這個,百思不得其解,於是花了一些時間在網上尋找思路。

有乙個我容易理解的方法如下,希望對你們有所幫助。我是在下面的**找到的思路。

主要內容如下:

看到這個方法,我恍然大悟,原來乙個難的問題,只要有正確的解題思路,也可以變的很簡單。

當然這個問題還有其它更好的解法,但是我暫時只學了這個。

於是就用c#語言寫了**如下:

using system;

using system.collections.generic;

using system.drawing;

using system.windows.forms;

namespace drawingtest

public void fp()

poker[0] = 1; //第乙個牌為1

int n = 0;

for (int i = 2; i <= 13; i++)

}//poker不為0證明有牌已經插入,跳過

魔術師發牌問題

說有乙個魔術師,他表演發牌的魔術,他將十三張黑桃牌放在一堆。然後開始數數,第一次,他數1,然後翻開第一張,果然是黑桃a,然後將黑桃a放到牌堆外。然後魔術師繼續數數,這次他數1,2,然後將數1的牌放到牌堆底,然後將數2的牌翻開,果然是黑桃2,然後將黑桃2放到一邊。繼續數1,2,3,果然每次都是對應的牌...

魔術師發牌問題

先搞清楚題意 注意按順序每翻到一張牌放到桌子上,不在手中了,其實是迴圈鍊錶的問題,可以在紙上模擬一下就可以得到牌開始的順序。1 一開始寫的比較麻煩 用兩個迴圈鍊錶,乙個放數字,乙個放序號,邊構造邊刪除,因為翻出來的牌已經放在一邊不在手上了,再用乙個card陣列存放開始的牌的順序。include st...

魔術師發牌問題

問題描述 魔術師手中有a 2 3 j q k十三張黑桃撲克牌。在表演魔術前,魔術師已經將他們按照一定的順序疊放好,有花色的一面朝下。魔術表演過程為 一開始,魔術師數1,然後把最上面的那張牌翻過來,是黑桃a 然後將其放到桌面上 第二次,魔術師數1 2 將第一張牌放到這些牌的最下面,將第二張牌翻轉過來,...