01/10/2018, 10:02

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…

Henry viết 12:09 ngày 01/10/2018

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

Thanh viết 12:04 ngày 01/10/2018

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

Gió viết 12:12 ngày 01/10/2018

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
Trần Hoàn viết 12:09 ngày 01/10/2018

Cái này có gọi là đệ quy không ta
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);

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

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?

Gió viết 12:11 ngày 01/10/2018
  • 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
Bài liên quan
0