题解
【提高】洗牌2
3 条题解
-
0
#include<bits/stdc++.h> using namespace std; int a[55], b[55];//b是暂存数组。 int main(){ int n, m, k, left, right; cin >> n >> m; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) { cin >> k;//k是指令,0或1. if (k) { cin >> left >> right; int c = 0; //将范围内的牌放到顶端,也就是放在b数组的最前面 for (int j = left - 1; j < right; j++) { b[c++] = a[j]; } //原本的牌按顺序落下,也就是继续接在b数组的后面。 for (int j = 0; j < left - 1; j++) { b[c++] = a[j]; } for (int j = right; j < n; j++) { b[c++] = a[j]; } //将暂存数组b里面整理好的牌放回a数组,方便多次洗牌操作。 for (int j = 0; j < n; j++) { a[j] = b[j]; } }else { //指令为0时的弹牌操作 int c = 0; for (int j = 0; j < n / 2; j++) {//n是偶数,直接除2,分为前后两部分交叉存放到b数组。 b[c++] = a[j]; b[c++] = a[j + n / 2]; } for (int j = 0; j < n; j++) { a[j] = b[j]; } } } //输出洗牌后的结果。 for (int i = 0; i < n; i++) { cout << a[i] << " "; } return 0; } -
0
#include<bits/stdc++.h> using namespace std; int a[55], b[55]; int main(){ int n, m, k, left, right; cin >> n >> m; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) { cin >> k; if (k) { cin >> left >> right; int c = 0; for (int j = left - 1; j < right; j++) { b[c++] = a[j]; } for (int j = 0; j < left - 1; j++) { b[c++] = a[j]; } for (int j = right; j < n; j++) { b[c++] = a[j]; } for (int j = 0; j < n; j++) { a[j] = b[j]; } }else { int c = 0; for (int j = 0; j < n / 2; j++) { b[c++] = a[j]; b[c++] = a[j + n / 2]; } for (int j = 0; j < n; j++) { a[j] = b[j]; } } } for (int i = 0; i < n; i++) { cout << a[i] << " "; } return 0; } -
0
#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