Chương trình tìm các phần tử ( Cho sẵn bởi 1 mảng) tạo thành của 1 số nguyên




Chương trình tính tổng các phần tử trong một mảng, sao cho chúng tạo thành một số nhập vào.
( Ví dụ, 102 = 50+50+1+1 , với mảng {1, 5, 10, 20, 50} )






Các phần tử của mảng gồm 50 , 20 , 10 , 5 , 1.
Theo yêu cầu, cần phải Cộng các số từ lớn nhất (có thể ) trước, ví dụ 102 = 100 +2 . Thấy rằng: 100 =50 ( A[4] ) +50 ( A[4] ) .

Như vậy cần lặp từ cuối lên : 




Vậy, trong vòng for làm gì...? Đây là câu hỏi chỉ được trả lời khi đã xác định được thuật toán cần sử dụng. Trong trương hợp này mình sẽ lấy Số lớn nhất trừ cho số nhập vào đến khi nó nhỏ hơn thì dừng lại.
Nói cách khác, trong trường hợp với số 102, và mảng như trên thì:

n = 102.( n>=50 )
102 -50 =52.(52>= 50)
52- 50 =2 (2< 50)

2>= 1 
nên n= 2-1 
1>= 1
nên n = 1-1 ( =0 ,và không còn phần tử cảu mảng thỏa mãn)

Dễ thấy công việc bên trên lặp đi lặp lại với điều kiện: n >= A[i ]. Nên ta dùng vòng lặp While:






để in ra dấu cộng trong phép toán ta chèn thêm câu lệnh in vào trong vòng while:





Nếu có bất kì thắc mắc hay chưa hiểu, hãy để lại Comment


Comments