top1编程
← 返回题目
题解

【基础】洗牌

1 条题解

  • 0
    @ 2026-7-28 22:44:45
    #include <bits/stdc++.h>
    using namespace std;
    
    int a[100],b[100];
    int i,j,n,order,x,y,m,k;
    int main() {
    	cin>>m>>n;
    	//m张牌
    	for(i = 1; i <= m; i++) {
    		cin>>a[i];
    	}
    
    	for(i = 1; i <= n; i++) {
    		cin>>order;
    		//切牌
    		if(order == 1) {
    			k = 1;//下标清零
    			cin>>x>>y;
    			for(j = x; j <= y; j++) {
    				b[k] = a[j];
    				k++;
    			}
    
    			for(j = 1; j < x; j++) {
    				b[k] = a[j];
    				k++;
    			}
    
    			for(j = y + 1; j <= m; j++) {
    				b[k] = a[j];
    				k++;
    			}
    
    			//拷贝回去
    			for(j = 1; j <= m; j++) {
    				a[j] = b[j];
    			}
    		} else {
    			for(j = 1; j <= m / 2; j++) {
    				b[j*2-1]=a[j];
    				b[j*2]=a[m/2+j];
    			}
    
    			for(j = 1; j <= m; j++) {
    				a[j] = b[j];
    			}
    		}
    	}
    
    	for(i = 1; i <= m; i++) {
    		cout<<a[i]<<" ";
    	}
    
    
    }
    
    • 1