Ошибка превышения лимита времени в коде C. Как мне это преодолеть? - PullRequest
0 голосов
/ 09 мая 2018

Я пытался преобразовать этот кусок кода в код, который использует только gotos, но я продолжаю получать сообщение об ошибке Time limit, когда я пытаюсь запустить его в онлайн-среде IDE, и когда я пытаюсь запустить на своей консоли, это недаже не реагируют и не печатают ошибки.

вот исходный код:

void sort (int skip, int ∗A, int length) {
    for (int n = length ; n > 1 ; n−−) {
        int i = 0 ;
        while (true) {
            if (skip == 0 && i < n−1) {
                if (A[i] > A[i +1]) {
                    A[i] = A[i] ^ A[i+1];
                    A[i +1] = A[i +1] ^ A[i] ;
                    A[i] = A[i] ^ A[i+1] ;
                }
            }else
                break ;
            i++;
       }
   }
}

и это преобразованный код:

#include <stdio.h>

void sort(int skip,int *A,int length){
    int n=length;
    int i,temp,temp2;
Lcond:
    if(n<=1) goto Lend;
Lbody:
    i=0;
Lcond_:
    if(skip!=0) goto Lelse;
    temp=n-1;
    if(i>=temp) goto Lelse;
Lbody_:
    temp2=i+1;
    if(A[i]>A[temp2]) goto Lbody__;
    i++;
    goto Lcond_;
Lbody__:
    A[i]=A[i]^A[temp2];
    A[temp2]=A[temp2]^A[i];
    A[i]=A[i]^A[temp2];
    i++;
    goto Lcond_;
Lelse:
    goto Lcond;
Lend:
    return;
}
int main(){
    int skip=0;
    int A[5]={3,5,1,4,2};
    int length=5;
    sort(skip,A,length);
    for (int i=0;i<5;i++){
            printf("%d\t",A[i]);
    }
}

1 Ответ

0 голосов
/ 09 мая 2018

Программа никогда не заканчивается, потому что только goto Lend находится в Lcond: if(n<=1) goto Lend;, а n никогда не изменяется, поэтому программа продолжает бесконечный цикл. Вам нужно конечное условие.

...