Hỏi về liệt kê dãy nhị phân bằng phương pháp sinh

Sao chương trình e code dưới đây thì nó chỉ in ra 3 số khi nhập n=2 vào vậy ạ?

.....
void gen(int a[], int n)
{
	for(int i=n; i>=1; i--){
		if(a[i]==0){
		 a[i]=1;
		 for(int j=i+1; j<=n; j++){
		 
		 a[j]=0;}
		 }
	}
}
.....

Bạn không thể xác định được code của bạn như thế nào sao?

3 Likes

dạ thiếu mất số 01 ạ

dạ e cũng xem đi xem lại rồi vẫn chưa biết nó lỗi chỗ nào nên mới hỏi. chứ e xác định được thì em hỏi làm gì ạ :slight_smile:

Mình chạy thử code của bạn thì thấy thế này:

n = 2
1:00
2:10
3:11

n = 3
1:000
2:100
3:110
4:111

Có vẻ hàm sinh giá trị kế tiếp đang đi từ trái qua phải :thinking:

3 Likes

Sai ở hàm gen. Đúng ra là không có vòng lặp lồng.

Giờ quay lại phép +1. Băt dầu từ phải sang trái thì 1 + 1 = 0 nhớ 1… cho đến 0 + 1. Tương tự với bất kì cơ số nào.

5 Likes

nghe cũng hợp lý đấy chứ

nhưng mà thật ra thì chẳng hợp lý tí nào
phương pháp làm bài tập code là gì?

  1. bạn cần lên ý tưởng, cái mà nhiều người gọi là “thuật toán”, là những bước bạn muốn máy tính thực hiện
  2. từ ý tưởng ở phần 1, bạn mới viết code để thực hiện các “bước” ở trên bằng những dòng lệnh của ngôn ngữ lập trình
  3. Kiểm tra kết quả

kết quả ra sai thì sao?

  1. thì bạn cần phải xem lại ý tưởng của bạn, bạn phải chắc chắn ý tưởng của bạn là hợp lý, là đúng
  2. nếu đã xác định ý tưởng của bạn đã đúng, thì bạn cần phải xác định code của bạn có khớp ý tưởng của bạn hay không? bằng cách nào?
    bằng các xem lát các bước của ý tưởng, kiểm tra code đã viết, ví dụ ý tưởng của bạn đến bước X thì cộng 2 số gì đó, nhưng vô tình bạn gõ thành dấu - thì sửa lại và lại tiếp tục test

chương trình của bạn có nhiều bước, ví dụ như 10 bước
bước 1 có kết quả là x1, bước 2 thì kết quả là x2…
bạn cần phải kiểm tra xem sau mỗi bước, chương trình có chạy đúng ý của bạn chưa, nếu sai ở đâu thì kiểm tra lại bước đó

chứ không phải ra sai thì đi hỏi người khác, làm sao người ta biết ý tưởng của bạn, ý tưởng của bạn đã chắc là đúng chưa,
bạn hỏi thì người ta phải chạy code và nghĩ ra cái input để test? nếu đúng lại phải nghĩ ra input khác cho nó sai để tìm câu trả lời? rồi sau đó tự đọc code của bạn? rồi sau đó đoán ý tưởng của bạn? rồi so sánh với cái đề bài để biết ý tưởng của bạn bị sai? rồi lại confirm với bạn rằng ý tưởng của bạn sai hay bước implement của bạn bị sai? rồi sửa giúp bạn?

Ở bài này code chỉ có vài dòng, nên chuyện bạn nhận được câu trả lời có thể giải quyết được vấn đề của bạn chắc là không khó
Nhưng cái bạn nhận được sau topic này là gì? là một đoạn code có thể submit được? what else?

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