Lỗi khi đếm các số dư khác nhau trong C

Em đang gặp 1 vấn đề trong C là: Em đếm không đúng các số dư khác nhau của a[i] khi chia lấy dư cho x. Mọi người giúp em với ạ.
Đây là code của em .

#include<stdio.h>
int dem=0;
int temp=0;
int main(){
	long long n,x;
	long long a[n];
	long long b[n];
	scanf("%ld %ld",&n,&x);
	for(long long i=0;i<n;i++){
		scanf("%ld",&a[i]);
	}
	for(long long i=0;i<n;i++){
		b[i]=a[i]%x;
	}

	for(long long i=0;i<n;i++){
		for(long long j=0;j<i;j++){
			if(b[i]==b[j]){
				temp=1;
			}
		}
		if(temp!=1){
			dem++;
		}
	}
	printf("%d",dem);
}

Cho em tò mò chút là code này chạy được ạ.

2 Likes

Chắc anh đùa ấy chứ sao code chạy được. Anh cap em xem đc không ạ.

3 Likes

Mạnh dạn giả định câu chuyện thế này:
Code chạy được là của thằng bạn, sau đó copy về đảo vị trí 1 số dòng…

8 Likes

thấy 4 dòng đầu của main hơi “ổn”

6 Likes

Code này mới nhìn vào đã thấy 2 vấn đề:

  1. Bạn dùng kiểu dữ liệu long long, bạn định tính với số siêu siêu lớn hay sao mà dùng cái này vậy?

  2. Trong C và C++ tiêu chuẩn, biến khi mới khai báo sẽ có giá trị rác (garbage value) do C và C++ không có tính năng garbage collector, thành ra code mới có thể chạy được (hên xui) trên Dev C++, nhưng trên trang chấm code có thể bật tính năng garbage collector được mấy người làm compiler thêm vào => Giá trị mặc định của biến là không có gì, hoặc bằng 0 => đoạn này bị lỗi do độ dài của mảng là số tự nhiên luôn > 0:

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