Câu đố Đệ quy hay: Dùng đệ quy để in ra tất cả các số có N = 3 chữ số và có tổng S = 4

Dùng đệ quy để in ra tất cả các số có N = 3 chữ số và có tổng S = 4, ví dụ: 112, 400, 121, 211, 013, 310…

013 cũng tính là số có 3 chữ số ạ?

tính hết luôn nhé…

1 Like

Không dùng đệ quy,1 chút kiến thức về tổ hợp:

for w in itertools.combinations(range(6),2):
	x,y,z=w[0],w[1]-w[0]-1,6-w[1]-1
	print(x,y,z)
#ouput
0 0 4
0 1 3
0 2 2
0 3 1
0 4 0
1 0 3
1 1 2
1 2 1
1 3 0
2 0 2
2 1 1
2 2 0
3 0 1
3 1 0
4 0 0
3 Likes

Cái này có gọi là đệ quy không ta :joy:
C#

void DeQuyKhongHay(System.Collections.Generic.List<uint> Outer, uint Input)
{
	if (Input > 999)
		return;
	if (Input / 100 + (Input % 100) / 10 + Input % 10 == 4)
		Outer.Add(Input);
	DeQuyKhongHay(Outer, Input + 1);
}

Và khi chạy hàm thì lưu vào một biến Output kiểu List, tuỳ theo môi trường mà in ra kiểu gì:

var Output = new System.Collections.Generic.List<uint>();
DeQuyKhongHay(Output, 0);

Bác giải thích thêm code đc k? e đọc k hiểu sao lại w1-w0 hay 6-1-w1 cả, công thức ấy gọi là gì bác?

  • Xem mỗi đơn vị là @, do tổng các chữ số là 4 nên sẽ có @@@@
  • có 3 chữ số nên sẽ có 2 | ngăn thành phần biểu diễn giữa các đơn vị @|@@|@ biểu diễn số 121
  • các tổ hợp của [0->5] chọn 2 phần tử chính là chọn vị trị | ở giữa những số đó
  • w[0], w[1]-w[0]-1, 6-1-w[1] là số @ ở giữa các | phân chia các đơn vị hang chuc, hang tram, hang don vi, từ đó ta có thể sinh ra tất cả các số theo yêu cầu của đề bài
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?