非常抱歉這才是我原本要傳的,剛剛我網路突然當掉,我按了幾下重新整理就不小心傳了很多次,十分擾民,非常抱歉。
以下是已經AC的程式:
#include<bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0);
ios_base::sync_with_stdio(0);
string s;
cin >> s;
int n,len=s.size();//字串長度
cin >> n;
while(n--){
int x;
cin >> x;
if(x==0){
for(int i=0;i+1<len;i+=2){//每隔兩個交換一次
swap(s[i],s[i+1]);
}
}
else if(x==1){
for(int i=0;i+1<len;i+=2){
if(s[i] > s[i+1]) {//直接隱性轉型比較大小
swap(s[i],s[i+1]);
}
}
}
else if(x==2) {
string head = s.substr(0,len/2), bottom = s.substr(len/2);
/*
substr操作等價於下面這段程式:
string head,bottom;
for(int i=0;i<len/2;i++){
head+=s[i];
}
for(int j=len/2;j<len;j++){
bottom+=s[j];
}
*/
for (int i=0;i<len;i++) {
s[i] = (i%2==0) ? head[i/2] : bottom[i/2];//利用三元運算子和整數除法交叉加入原本字串
/*
等價於下面操作:
int cnt1=0,cnt2=0;
for(int i=0;i<len;i++){
if(i%2==0){
s[i] = head[cnt1];
cnt1++;
}
if(i%2==1){
s[i] = bottom[cnt2];
cnt2++;
}
}
*/
}
}
}
cout << s << '\n';
return 0;
}