Giúp tìm lỗi sai trong bài tìm xâu nhị phân độ dài n có k bit 1 liên tiếp

Mong mọi người chỉ giúp em chô sai ở bài này với ạ.Hãy liệt kê tất cả các xâu nhị phân có độ dài 𝑛 sao cho mỗi xâu nhị phân có duy nhất một dãy 𝑘 bít 1 liên tiếp

#include<iostream>
using namespace std;
int ok = 0, n, a[100], k;
void Init(){
	cout << "Nhap vao do dai n: "; cin >> n;
	cout << "NHap vao k bit 1 : "; cin >> k;

}
void Result(void){
	for (int i = 1; i <= n; i++){
		cout << a[i];
	}
	cout << endl;
}
void Bit_String(void){
	int i = n;
	while (i > 0 && a[i] == 1){
		a[i] = 0; i--;
	}
	if (i > 0){
		a[i] = 1;
	}
	else ok = 1;
}
int Test(){
	int dem = 0;
	for (int i = n; i >0; i--){
		a[i] = 1;
		for (int j = n-1; j >0; j--){
			if (a[i] == a[j])dem++;
		}
	}
	if(k == dem)  return 1;
	return 0;
}
int main(){
	Init();
	while (!ok){
		if (Test())Result();
		Bit_String();
	}
	return 0;
}

mik nghĩ bạn sai ở hàm kiểm tra ý!!!
// Hãy liet kê tat ca các xâu nhi phân có do dài n sao cho moi xâu nhi phân có duy nhat mot dãy k bít 1 liên tiep
#include
using namespace std;
void khoitao(int a[100],int n){
for(int i=0;i<n;i++){
a[i]=0;
}
}
void in(int a[100],int n){
for(int i=0;i<n;i++){
cout<<a[i];
}
cout<<endl;
}
int kt(int a[100],int n,int k){
int dem=0;
for(int i=0;i<n;i++){
if(a[i]==1&&a[i+1]==1) dem++;
}
if(dem==k-1) return 1;
return 0;
}
void next(int a[100],int n){
for(int i=n-1;i>=0;i–){
if(a[i]==0){
a[i]=1;
for(int k=i+1;k<n;k++){
a[k]=0;
}
break;
}
}
}
int final(int a[100],int n){
int dem=0;
for(int i=0;i<n;i++){
if(a[i]==1) dem++;
}
if(dem==n) return 1;
return 0;
}
void nhiphan(int a[100],int n,int k){
while(final(a,n)==0){
next(a,n);
if(kt(a,n,k)==1) in(a,n);
}
}
int main(){
int n,k;
int a[100];
cout<<"nhap n,k lan luot la: ";
cin>>n>>k;
khoitao(a,n);
nhiphan(a,n,k);
}
Đây là code của mik , nếu có gì sai sót mong mọi người thông cảm cx như đóng góp ạ

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