题解:内有四种解法
2026-08-16 17:38:04
发布于:四川
4阅读
0回复
0点赞
第一种:交换输出顺序
#include<bits/stdc++.h>
using namespace std;
int a[200005]; // 根据题目 n <= 2^10,开稍大一点防止边界问题
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 1; i <= n; i += 2){
cout << a[i+1] << " " << a[i] << " ";// 输出第 i+1 个和第 i 个,实现交换效果
}
return 0;
}
第二种:用swap函数
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, a[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 1; i <= n; i += 2){
// 成对交换:第1与第2,第3与第4...
// 因为 n 是偶数,i+1 永远不会越界
swap(a[i],a[i+1]);
}
for(int i = 1; i <= n; i++){
cout << a[i] << " ";// 输出结果
}
return 0;
}
第三种:异或和
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, a[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 1; i <= n; i += 2){
// 使用异或交换 arr[i] 和 arr[i+1]
// 步骤1: arr[i] 存储两者的异或值
a[i] ^= a[i + 1];
// 步骤2: arr[i+1] 变为原来的 arr[i]
// 解释: arr[i+1] = (原arr[i] ^ 原arr[i+1]) ^ 原arr[i+1] = 原arr[i]
a[i + 1] ^= a[i];
// 步骤3: arr[i] 变为原来的 arr[i+1]
// 解释: arr[i] = (原arr[i]^ 原arr[i+1])^ 原arr[i] = 原arr[i+1]
a[i] ^= a[i + 1];
// 输出结果
cout << a[i] << " " << a[i + 1] << " ";
}
return 0;
}
第四种:新添变量
#include <bits/stdc++.h>
using namespace std;
// 题目中 n <= 2^10
int a[200005];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin >> n;
// 输入数据
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
// 成对交换
// 步长为 2,每次处理 a[i] 和 a[i+1]
for (int i = 1; i <= n; i += 2) {
int c = a[i]; // 1. 暂存第一个数
a[i] = a[i + 1]; // 2. 将第二个数赋给第一个位置
a[i + 1] = c; // 3. 将暂存的数赋给第二个位置
}
// 输出结果
for (int i = 1; i <= n; ++i) {
cout << a[i]
; }
return 0;
}
如果此条题解有用,麻烦点个赞
关注一下
全部评论 1
点个赞,爱你们哟

3天前 来自 四川
1






有帮助,赞一个