藍橋杯歷屆 巧排撲克牌

2021-07-10 07:13:39 字數 1357 閱讀 6250

小明剛上小學,學會了第乙個撲克牌「魔術」,到處給人表演。魔術的內容是這樣的:

只見他先從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上,是a;然後再從最下面拿一張放到最

面,再從最下面拿一張翻開放桌子上,是2;......如此迴圈直到手中只有一張牌,翻開放桌子上,剛好是k。

這時,桌上牌的順序是:a,2,3,4,5,6,7,8,9,10,j,q,k

請你計算一下,小明最開始的時候手裡牌的順序是怎樣的。

把結果寫出來,逗號分割,小明「魔術」開始時,最下面的那張牌輸出為第乙個資料。

考場不提供撲克牌,你只能用計算機模擬了,撕碎草稿紙模擬撲克屬於作弊行為!另外,你有沒有把錄影倒著放過?很有趣的!回去試試!

思路:題目中提示了「有沒有把錄影倒著放過?」這句話,意思就是讓魔術師的動作倒轉就可以求出原來牌的組合!仔細看,題目中「先從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上」,倒過來就是「將放在桌子上的牌放在牌堆最下面,將牌堆的最上面一張放在最下面」,好的,大功告成,只要將結果按照這個順序排就ok了!

**1是按照魔術師的操作步驟編的程(用來測試的**):

如果按照魔術師的步驟,1,2,3,4,5經過變換之後最後結果是4,2,5,1,3

那麼請**2就是用反向思維將4,2,5,1,3變回1,2,3,4,5的

桌面上是4,2,5,1,3

步驟:

3 31->13

135->351

3512->5123

51234->12345

#include

#include

#include

using

namespace

std;

int main() ;

list

a;list

a1;

list

::iterator it1;

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

for (it1 = a.begin(); it1 != a.end(); it1++)

}it1 = a1.end();

it1--;

for (; it1 != a1.begin(); it1--) else

if (*it1 == 12) else

if (*it1 == 13) else

if (*it1 == 1) else

printf("%d ", *it1);

}printf("%d", *it1);

return

0;}

答案是7, a, q, 2, 8, 3, j, 4, 9, 5, k, 6, 10

2012藍橋杯 初賽試題 巧排撲克牌

題目描述 小明剛上小學,學會了第乙個撲克牌 魔術 到處給人表演。魔術的內容是這樣的 他手裡握著一疊撲克牌 a,2,j,q,k 一共13張。他先自己精心設計它們的順序,然後正面朝下拿著,開始表演。只見他先從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上,是a 然後再從最下面拿一張放到最上面,再從...

第三屆藍橋杯 巧排撲克牌

題目 巧排撲克牌 小明剛上小學,學會了第乙個撲克牌 魔術 到處給人表演。魔術的內容是這樣的 只見他先從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上,是a 然後再從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上,是2 如此迴圈直到手中只有一張牌,翻開放桌子上,剛好是k。這時,桌上牌的順序...

藍橋杯 撲克牌「魔術

小明剛上小學,學會了第乙個撲克牌 魔術 到處給人表演。魔術的內容是這樣的 他手裡握著一疊撲克牌 a,2,j,q,k 一共13張。他先自己精心設計它們的順序,然後正面朝下拿著,開始表演。只見他先從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上,是a 然後再從最下面拿一張放到最上面,再從最下面拿一...