WA!!求助!!

P4414 [COCI2006-2007#2] ABC

SXe16384 @ 2024-12-05 23:27:38

学校有要求,必须使用C语言编写,所以只能用scanf()了(

测试全是WA,但是检查不出什么问题,头都要炸了口牙

#include<stdio.h>

void turn(int x[], int m, int n);
void bubble(int arr[], int l);
//这里引入了自己写的冒泡排序法的函数,已知排序函数部分没有问题(别的题也用过,都通过了)请大佬忽略

int main(){
    char ord[3];
    int x[3];
    int y[3];
    scanf("%d%d%d",&x[0], &x[1], &x[2]);
    getchar();
    scanf("%s", ord);
    getchar();
    //先把输入按要求接收好

    bubble(x, 3);
    //把三个数字从小到大排个序

    for(int i = 0; i < 3; i ++){
        if(ord[i] == 'A')
            y[i] = x[0];
        if(ord[i] == 'B')
            y[i] = x[1];
        if(ord[i] == 'C')
            y[i] = x[2];
    }
    //根据ABC的位置把数字重新安排位置

    printf("%d %d %d", y[0], y[1], y[2]);
    return 0;
    //输出
}

//下面的函数都和排序有关,都是没问题的,请大佬忽略
void turn(int x[], int a, int b){
    int t;
    t = x[a];
    x[a] = x[b];
    x[b] = t;
    return;
}

void bubble(int arr[], int l){
    int flag = 1;
    while (flag == 1){
        flag = 0;
        for (int i = 0; i <= l - 2; i ++){
            if(arr[i] > arr[i + 1]){
                turn(arr, i, i + 1);
                flag = 1;
            }
        }
    }
}

by zhs_TLE @ 2024-12-06 00:32:18

@SXe16384 把O2优化关了就对了


by zhs_TLE @ 2024-12-06 00:33:19

求关 @SXe16384


by schirst @ 2024-12-06 07:44:15

众所周知,字符串结尾其实有一个隐藏的'\0',所以问题很简单,你的ord数组越界了,开到4以上就不厌氧了


by SXe16384 @ 2024-12-06 13:10:41

@schirst有用!做题的时候没有真正理解\0这个概念。谢谢大佬解惑!


by SXe16384 @ 2024-12-06 13:13:59

@zhs_TLE我关了优化,确实就可以过了,谢谢大佬,已关!


|