題目描述
對於一副撲克牌,我們有多種不同的洗牌方式。一種方法是從中間某個位置分成兩半,然後相交換,我們稱之為移位(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行,每行乙...