1477 怪異的洗牌

2022-04-17 15:10:02 字數 931 閱讀 1291

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

給定n張牌,初始次序為從1到n,經過若干次的shift和flip操作後,結果會是什麼樣?

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

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

樣例輸入:

6 1

40 0

樣例輸出:

1 6 5 2 3 4

#includeusing

namespace

std;

int a[1002

];void

init()

}void reverse(int left,int

right)

}void shift(int n,int

x)void flip(int

n)int

main()

cout

<}

}

return0;

}

怪異的洗牌

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

1477 神奇的幻方

描述 問題描述 幻方是一種很神奇的 nn 矩陣 它由數字 1,2,3,nn 構成,且每行 每列及兩條對角線上的數字之和都相同。當n為奇數時,我們可以通過以下方法構建乙個幻方 首先將 1 寫在第一行的中間。之後,按如下方式從小到大依次填寫每個數k k 2,3,n n 若 k 1 在第一行但不在最後一列...

怪異的排列

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