Liệt kê xâu nhị phân độ dài n thỏa mãn tính chất có 3 bit 1

Hi mọi người, đây là code mã nguồn mình viết trên C++ để tìm bài lời giải cho bài toán, nhưng mình không ra được đúng kết quả? Mọi người chỉ ra giúp mình sai ở đâu và hướng giải quyết như nào với

#include<iostream>
#define MAX 1000000
using namespace std;
int n, a[MAX];
int numberOf1 = 0;
void print(){
	for(int j = 1; j <= n; j++) cout<<a[j];
	cout<<endl;
}

void TRY(int i){
	for(int v =0 ; v<=1; v++){
		a[i] = v;
		if(a[i] == 1) {
			numberOf1++;
		}
		
		if(i == n && numberOf1 == 3 ){
			print();
		}else {
			TRY(i+1);
		}	
	}
	numberOf1 =0;
}
int  main() {
	cin>>n;
	TRY(1);
	return 0;
}

Bạn xem lại đoạn sau nhé:

if(i == n && numberOf1 == 3 ){
print();
}else {
TRY(i+1);
}

Vấn đề là ở chỗ đó. Nếu giả sử như n = 5, i lúc đó bằng 5, nhưng numberOf1 = 1, thì nó sẽ tiếp tục gọi TRY(5+1) phải không?

ĐÚng rồi bạn, bị tràn stack bạn ạ, mình đã thử lại như này

if(i == n  ){
    if(numberOf1 ==3){
		print();
	}else {
		TRY(i+1);
	}	
    
}

Mà vẫn không có được

Phải sửa thành:

if(i == n){
	if(numberOf1 ==3){
		print();
	}
	return;
} else {
		TRY(i+1);
}

merged and moved by noname00

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