題目描述:對於一副撲克牌,我們有多種不同的洗牌方式。一種方法是從中間某個位置分成兩半,然後相交換,我們稱之為移位(shift)。比如原來的次序是123456,從第4個位置交換,結果就是561234。這個方式其實就是陣列的迴圈移位,為了多次進行這個操作,必須使用一種盡可能快的方法來程式設計實現。在本題目中,還引入另外一種洗牌方式,就是把前一半(如果總數是奇數,就是(n-1)/2)牌翻轉過來,這種操作稱之為翻轉(flip)。在前面shift操作的結果上進行flip,結果就是165234。當然,如果是實際的撲克牌,直接翻轉會造成正反面混在一起的,我們就不管那麼多了。
給定n張牌,初始次序為從1到n,經過若干次的shift和flip操作後,結果會是什麼樣?
輸入:輸入包括多組測試資料,每組資料的第一行包括兩個數 n和k。n表示牌的數目,1
輸出:對於輸入的每組資料,計算經過給定的k次shift和flip操作後,各個位置的數值。並按次序在一行上輸出所有牌張的值,每個數值(包括最後乙個)後面有乙個空格。
樣例輸入:
6 140 0
樣例輸出:
1 6 5 2 3 4
#includeusingnamespace
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行,每行乙...