怪異的洗牌

2021-10-06 08:27:33 字數 1253 閱讀 4364

題目描述

對於一副撲克牌,我們有多種不同的洗牌方式。一種方法是從中間某個位置分成兩半,然後相交換,我們稱之為移位(shift)。比如原來的次序是123456,從第4個位置交換,結果就是561234。這個方式其實就是陣列的迴圈移位,為了多次進行這個操作,必須使用一種盡可能快的方法來程式設計實現。在本題目中,還引入另外一種洗牌方式,就是把前一半(如果總數是奇數,就是(n-1)/2)牌翻轉過來,這種操作稱之為翻轉(flip)。在前面shift操作的結果上進行flip,結果就是165234。當然,如果是實際的撲克牌,直接翻轉會造成正反面混在一起的,我們就不管那麼多了。 給定n張牌,初始次序為從1到n,經過若干次的shift和flip操作後,結果會是什麼樣?

輸入描述:

輸入包括多組測試資料,每組資料的第一行包括兩個數 n和k。n表示牌的數目,1輸出描述:

對於輸入的每組資料,計算經過給定的k次shift和flip操作後,各個位置的數值。並按次序在一行上輸出所有牌張的值,每個數值(不包括最後乙個)後面有乙個空格。

示例1輸入

6 14

0 0輸出

1 6 5 2 3 4

**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

intmain()

//shift

int count;

int newnumber[

1000];

for(

int j =

0; j < k; j++

)for

(int i =

1; i <= count; i++

)//flip

int index;

if(n %2!=

0)else

for(

int i =

1; i <= index /

2; i++

)for

(int i =

1; i <= n; i++)}

for(

int i =

1; i <= n; i++

) cout << endl;

}return0;

}

1477 怪異的洗牌

題目描述 對於一副撲克牌,我們有多種不同的洗牌方式。一種方法是從中間某個位置分成兩半,然後相交換,我們稱之為移位 shift 比如原來的次序是123456,從第4個位置交換,結果就是561234。這個方式其實就是陣列的迴圈移位,為了多次進行這個操作,必須使用一種盡可能快的方法來程式設計實現。在本題目...

完美洗牌 洗牌

完美洗牌問題,給定乙個陣列a1,a2,a3,an,b1,b2,b3.bn,把它最終設定為b1,a1,b2,a2,bn,an這樣的。o n 的演算法,o n 的空間。對於前n個數,對映為f i 2 i 1,0 i n 2 比如0 1,1 3 對於後n個數,對映為f i 2 i n 2 n 2 i n ...

怪異的排列

description 將輸入的n個整數,按照這些數的逆序數從小到大排序輸出。數字的逆序 例如數字是123,則逆序數為321 例如輸入的資料為 122,432,321 則輸出 321 122 432 注意 輸出還是那些數,只是排序依據是其逆序數。input 第一行為n n 100 其後的n行,每行乙...