01/10/2018, 01:02

Thao tác với nhiều mảng con!

Chào các A/C!
Em có một hàm xuất ra mảng các chuỗi bit nhị phân 0 và 1: với chiều dài là số nguyên n nhập từ bàn phím!
ex: với n = 4: thì tương ứng sẽ có 16 chuỗi bit: 0000, 0001, 0010, 0011,…, 1111.
Nhưng, em đang thắc mắt không biết mình thao tác với từng chuỗi con của nó như thế nào! Em tính dùng vòng for để truy xuất từng chuỗi, ví dụ thao tác với chuỗi 0000 xong thì lần lặp thứ 2 thao tác với chuỗi 0001, tương tự.
Vấn đề là em không biết viết cái hàm ntn! Em dùng con trỏ, sử dụng vùng nhớ động để in ra các chuỗi bit như thế này! Chủ yếu là em không biết các chuỗi này được lưu vào bộ nhớ như thế nào!
Mong anh chị giải đáp giúp thằng em này với!

ht194 viết 03:12 ngày 01/10/2018

char *p = malloc(n+1); p[n] = "\n"; for(unsigned char i = 0; i< (2<<n); i++){ for(unsigned char j = 0; j < n; j++){ if((i >> (n - j - 1)) & 0x01) p[j] = '1'; else p[j] = '0'; } printf("%d: %s\t", i, p); }
free(p);

Huynh Nguyen viết 03:10 ngày 01/10/2018

Ủa, cái hàm này bác viết là hàm sinh tập con dạng binary mà! Nhập n = 4 kết quả là:
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
10: 1010
11: 1011
12: 1100
13: 1101
14: 1110
15: 1111
Vấn đề ở đây không khải là viết hàm sinh tập con như thế nào! Mà là dựa vào các tập con đó mà mình chuyển về ký tự. Ví dụ cụ thể như sau:
Nếu n nhập = 4. Và Người dùng nhập vào 4 thuộc tính là ABCD mình sinh tập con theo dạng ký tự á! Giống như là bit 1 thì xuất ký tự tương ứng ở vị trí đó, còn bit 0 thì ko xuất. Ví dụ 0001 thì xuất D, 1111 thì xuất ABCD…
Theo những tập con ở trên thì kq trả về sẽ là:
0: (tập rỗng vì các bit = 0)
1: D
2: C
3: CD
4: B
5: BD
6: BC
7: BCD
8: A
9: AD
10: AC
11: ACD
12: AB
13: ABD
14: ABC
15: ABCD
Vị trí nào bit là 0 thì ko in ra!
Em không biết xây dựng thuật toán như thế nào ạ! Hóng cao nhân!

kiencon viết 03:10 ngày 01/10/2018

thì chú cũng phải dựa vào 15 cái chuỗi bit được sinh ra như trên mà xuất A B C D chứ, viết cái hàm sinh ra chuỗi với tham số là các chuỗi bit vừa được sinh ra là ok thôi

Đỗ Mạnh Hà viết 03:14 ngày 01/10/2018

Hi bạn!

Theo như ý bạn muốn thì mình có viết một đoạn code nhỏ để chia sẻ với bạn yêu cầu bạn muốn:

P/s: Phần vòng lặp với i < 4 bạn thay giá trị n user nhập vào nhé

Hy vọng sẽ hữu ích!

Bài liên quan
0