# Array# Simulation

g797 - 洗牌 (Cards)

🔗 前往 ZeroJudge 原題

題目描述

題目給定一個包含 n 個數字的陣列,以及一個洗牌的次數 m。洗牌的規則是將陣列中的偶數索引位置的元素和奇數索引位置的元素交錯排列。要求輸出洗牌 m 次後陣列的內容。

解題思路

這題的解題思路是直接模擬洗牌的過程。每次洗牌都建立一個新的陣列,將原陣列的偶數索引和奇數索引的元素分別放入新陣列的偶數和奇數索引位置。然後將新陣列複製回原陣列,重複 m 次即可。

複雜度分析

  • 時間複雜度: O(n*m)
  • 空間複雜度: O(n)

程式碼

#include <iostream>
using namespace std;
int a[500],b[500],n,m;
int main(){
	cin >> n >> m;
	for(int i=0;i<n;++i)
		cin >> a[i];
	for(int i=0;i<m;++i){
		int it=0;
		for(int j=0;j<n;j+=2)
			b[j]=a[it++];
		for(int j=1;j<n;j+=2)
			b[j]=a[it++];
		for(int j=0;j<n;++j)
			a[j]=b[j];
	}
	for(int i=0;i<n;++i)
		cout << a[i] << " ";
}

Discussion