C 代码中的时间限制超出错误。我如何克服它?
Time Limit Exceeded error in C code . How do I overcome it?
我试图将这段代码转换为仅使用 goto 的代码,但是当我尝试在在线 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]);
}
}
程序永远不会结束,因为只有goto Lend
在Lcond: if(n<=1) goto Lend;
中,而n
永远不会改变,所以程序一直在无限循环。你需要一个结束条件。
我试图将这段代码转换为仅使用 goto 的代码,但是当我尝试在在线 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]);
}
}
程序永远不会结束,因为只有goto Lend
在Lcond: if(n<=1) goto Lend;
中,而n
永远不会改变,所以程序一直在无限循环。你需要一个结束条件。