Câu hỏi chính của em là: Có khi nào mọi người dành rất nhiều thời gian để hiểu tại sao chương trình của mình không hoạt động và vẫn không biết dù đoạn code khá ngắn không ạ? Khi đó mọi người có mọi người có bỏ qua nó không ạ?
Nấu câu trả lời của mọi người là bỏ qua, thì không cần đọc câu hỏi dưới đâu ạ!
Câu hỏi phụ cho câu hỏi trên:
Em có một bài toán: Nhập vào n
và l
; in ra các nhị phân độ dài n trong đó không tồn tại dãy con độ dài l
cạnh nhau giống nhau.
Em dựng hàm kiểm tra xem một mảng kích thước n
có tồn tại dãy con độ dài l
cạnh nhau không, nếu không thì trả về 1
, nếu có thì trả về 0
.
void inMang(int * a, int batDau, int ketThuc); // In ra mảng từ a[batDau] đến a[ketThuc]
int kiemTra(int *a, int n, int l);
void dayNhiPhan(int *a, int n, int l, int i); // Tạo các dãy nhị phân bằng quay lui
int main()
{
int a[100] = {0};
int n = 0, l = 0;
scanf("%d %d", &n, &l);
dayNhiPhan(a, n, l, 0);
return 0;
}
void inMang(int *a, int batDau, int ketThuc)
{
for (int i = batDau; i <= ketThuc; i ++)
printf("%d", a[i]);
printf("\n");
}
int kiemTra(int *a, int n, int l)
{
int ketQua = 0;
if (n < 2*l) return 1;
for(int i = 0; i <= n - 2*l; i ++)
{
ketQua = 0;
for (int j = 0; j <= l - 1; j ++)
if (a[i + j] != a[i + l + j])
ketQua = 1;
if (ketQua == 0) return 0;
}
return ketQua;
}
void dayNhiPhan(int *a, int n, int l, int i)
{
for (int j = 0; j <= 1; j ++)
{
a[i] = j;
if (i == n - 1 && kiemTra(a, n, l)) inMang(a, 0, n - 1);
else dayNhiPhan(a, n, l, i + 1);
}
}
Khi chạy thì gặp lỗi Segmatation fault
. Sử dụng Debugger
thì lỗi xảy ra ở:
if (i == n - 1 && kiemTra(a, n, l)) inMang(a, 0, n - 1);
else dayNhiPhan(a, n, l, i + 1);