0
已解决
5127 数组变换经验值:0
题目描述 Description
输入一个数组,下标从1开始,总长度2*n,把前半部分放入1 3 5的位置上…后半部分放到2 4 6…的位置上,进行两次这样的操作,输出交换后的序列。
输入描述 Input Description
输入2行
第1行输入一个正整数n
第2行输入2*n个正整数,数字之间用空格隔开
输出描述 Output Description
输出一行,输出经过2次操作之后的序列,数字之间用空格隔开;
样例输入 Sample Input
4 1 2 3 4 5 6 7 8
样例输出 Sample Output
1 3 5 7 2 4 6 8
数据范围及提示 Data Size & Hint
n<=50,
数组里的每个元素的值不超过1000
附上样例都没过的代码:
//CODE
//#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#define N 205
using namespace std;
int n, a [ N ], m = 2, b [ N ];
int main() {
cin >> n;
for (int i = 1; i <= 2 * n; i ++) {
cin >> a [ i ];
}
for (int j = 1; j <= 2; j ++) {
for (int i = 1; i <= 2 * n; i ++) {
if (i <= n) {
b [ 2 * (n - i) - 1 ] = a [ i ];
}
else {
b [ 2 * (i - n) - 1 ] = a [ i ];
}
}
memcpy (a, b, sizeof (b));
}
for (int i = 1; i <= 2 * n; i ++) {
cout << a [ i ] << ' ';
}
return 0;//好习惯!
}
这题我是按照1107换座位这题的做法写的,为什么不对啊!!
求各位大佬解答!
最好有思路和核心代码
0
已采纳
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iomanip>
#include<string>
using namespace std;
//bool f[501];
int main(){
int n,a[101],b[101],m=2;
cin>>n;
for(int i=1;i<=2*n;i++){
cin>>a[i];
}
while(m--){
for(int i=1;i<=n;i++){
b[i*2-1]=a[i];
}
for(int i=n+1;i<=2*n;i++){
b[2*(i-n)]=a[i];
}
for(int i=1;i<=2*n;i++){
a[i]=b[i];
}
}
for(int i=1;i<=2*n;i++){
cout<<b[i]<<" ";
}
}