#45071: C++超簡易解(抱歉我剛剛網路突然當掉)


812034alex@gmail.com (薛宇峻)

學校 : 不指定學校
編號 : 255754
來源 : [1.200.247.176]
最後登入時間 :
2025-01-05 20:11:16
q182. 2. 字串操作 -- 2025年1月APCS | From: [1.200.247.176] | 發表日期 : 2025-01-05 21:01

非常抱歉這才是我原本要傳的,剛剛我網路突然當掉,我按了幾下重新整理就不小心傳了很多次,十分擾民,非常抱歉。

以下是已經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;
}

 
ZeroJudge Forum