這份程式碼上傳已經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);//head為前半部分,這份程式碼船已經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);//head為前半部分,bottom為後半部分
/*
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;
}