Giúp kiểm tra code bị Runtime error

đề bài tìm khoảng cách nhỏ nhất giữa 2 phần tử và đếm số k/c nhỏ nhất.
N (N ≤ 100 000) số nguyên
A[i] (-10^9 ≤ A[i] ≤ 10^9) khoảng số nguyên

#include <stdio.h>

void sort(long local[], long n) {
	long i, j;
	for(i=0; i<n-1; i++) {
		for(j=i+1; j<n; j++) {
			if(local[i] < local[j]) {
				long temp = local[i];
				local[i] = local[j];
				local[j] = temp;
			}
		}
	}
}

int main() {
	long test;
	scanf("%ld", &test);
	while(test--) {
		long n;
		scanf("%ld", &n);
		long location[n+5];
		long i;
		for(i=0; i<n; i++) {
			scanf("%ld", &location[i]);
		}
		sort(location, n);
		long min1 = location[0]-location[1];
		long min2 = location[n-2] - location[n-1];
		long min = min1<=min2?min1:min2;
		if(n<=3) {
			if(min1==min2) printf("%ld %ld\n", min, 2);
			else printf("%ld %ld\n", min, 1);
			continue;
		}
		long count[n];
		for(i=0; i<min+1; i++) count[i]=0;
		if(n%2==0) {
			for(i=1; i<n-1; i+=2) {
				long t1 = location[i-1]-location[i];
				long t2 = location[i]-location[i+1];
				if(t1 <= min) {
					count[t1]++;
				}
				if(t2 <= min) {
					count[t2]++;
				}
			}
			long t = location[n-2]-location[n-1];
			if(t < min) {
				count[t]++;
			}
		} else {
			for(i=1; i<n; i+=2) {
				long t1 = location[i-1]-location[i];
				long t2 = location[i]-location[i+1];
				if(t1 <= min) {
					count[t1]++;
				}
				if(t2 <= min) {
					count[t2]++;
				}
			}
		}
		for(i=1; i<min+1; i++) {
			if(count[i]) {
				printf("%ld %ld\n", i, count[i]);
				break;
			}
		}
	}
	return 0;
}

Khoảng cách nhỏ nhất giữa 2 phần tử. Và sau đó bạn dùng đến sort(). Thay vì sắp xếp rồi sau đó tìm, sao không tìm luôn? Việc sắp xếp 2 vòng lặp lồng nhau, việc tìm cũng 2 vòng lặp lồng nhau => sắp xếp chỉ tốn thêm thời gian.

Còn lỗi xảy ra thì bạn có còn thêm thông tin gì nữa không? Mã lỗi, thông báo lỗi…

1 Like
  1. Đếm số min dễ nhất là khi bạn có min rồi thì quay lại đếm xem có bao nhiêu số bằng min thôi.
  2. Người ta không sort như vậy :slight_smile:
3 Likes

ko có min b. đề cho dãy ngẫu nhiên

nộp trên web trường chỉ có lỗi RTE(runtime error) thôi ạ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?