#45138: c語言解法(只用stdio.h)


211051@mail2.khgs.tn.edu.tw (呈)

學校 : 不指定學校
編號 : 283969
來源 : [114.140.128.95]
最後登入時間 :
2025-02-07 11:24:59
q182. 2. 字串操作 -- 2025年1月APCS | From: [111.255.30.43] | 發表日期 : 2025-01-13 14:16

#include <stdio.h>

void sort1(char *S) {
    int length = strlen(S);
    for (int i = 0; i < length - 1; i += 2) {
        char temp = S[i];
        S[i] = S[i + 1];
        S[i + 1] = temp;
    }
}

void sort2(char *S){
    int length = strlen(S);
    for (int i = 0; i < length - 1; i += 2) {
        if(S[i]>S[i+1]){
          char temp = S[i];
          S[i] = S[i + 1];
          S[i + 1] = temp;
        }
    }
}

void sort3(char *S){
    int length = strlen(S);
    char s1[100],s2[100];
    int mid=length/2;
    for (int i = 0; i < mid; i += 1) {
        s1[i]= S[i];
    }
    
    for (int i = 0; i < length - mid; i++) {
        s2[i] = S[mid + i];
    }
    
    for (int i = 0; i < length; i += 1) {
        if(i%2==0){
          S[i]=s1[i/2];
        }else{
          S[i]=s2[i/2];
        }
    }
}
int main(void) {
    char S[100];
    int k, j = 0;
    scanf("%[^\n]", S);
    scanf("%d", &k);
    int arr[k];

    for (int i = 0; i < k; i++) {
        scanf("%d", &arr[i]);
    }

    while (k--) {
        if (arr[j] == 0) {
            sort1(S);
        }else if(arr[j] == 1){
            sort2(S);
        }else if(arr[j] == 2){
            sort3(S);
        }
        j++;
    }

    printf("%s", S);
}

 
#45798: Re: c語言解法(只用stdio.h)


a09387795119@gmail.com (gonnnm)

學校 : 不指定學校
編號 : 157668
來源 : [182.233.24.152]
最後登入時間 :
2025-05-11 09:14:35
q182. 2. 字串操作 -- 2025年1月APCS | From: [182.233.24.152] | 發表日期 : 2025-04-13 23:18

#include<stdio.h>
//不用指標c++也能用
void s1(char str[],int len){
int i=0;
for(i=0;i<len;i+=2){
char temp=str[i];
str[i]=str[i+1];
str[i+1]=temp;
}
}
 
void s2(char str[],int len){
int i=0;
for(i=0;i<len;i+=2){
if(str[i]-'0'>str[i+1]-'0'){
char temp=str[i];
str[i]=str[i+1];
str[i+1]=temp;
}
}
}
 
void s3(char str[],int len){
int i,right=(len+1)/2;
char str1[right],str2[right];
for(i=0;i<right;i++){
str1[i]=str[i];
for(i=0;i<right;i++){
str2[i]=str[right+i];
for(i=0;i<len;i+=1){
if(i%2==0){
str[i]=str1[i/2];
}else{
str[i]=str2[i/2];
}
}
 
int main(void){
char str[1000];
int i,j,k;
scanf("%[^\n]", str);
scanf("%d",&k);
int arr[k];
int len=strlen(str);
for(i=0;i<k;i++){
scanf("%d",&arr[i]);
}
for(i=0;i<k;i++){
if(arr[i]==0){
s1(str,len);
}else if(arr[i]==1){
s2(str,len);
}else{
s3(str,len);
}
}
printf("%s",str);
return 0;
}
 
ZeroJudge Forum