You are on page 1of 9

Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 1 of 9

KĨ THUẬT LẬP TRÌNH CHIA SẺ KIẾN THỨC, KINH NGHIỆM GIẢI THUẬT – LẬP TRÌNH

Pascal Giải Thuật & Lập Trình Hợp Ngữ Tài Liệu Phần Mềm Tổng Quan Hỏi Đáp

Chuyên mục
Tìm kiếm

Bài toán chia phần thưởng


Tháng 8
Giải thuật & lập trình 18
Cấu trúc dữ liệu 2011
Đệ quy, Quy hoạch động Thêm bình luận
và giải thuật
Danh sách liên Cần chia hết m phần thưởng cho n học sinh sắp theo thứ tự từ giỏi trở xuống
kết
sao cho mỗi bạn nhận được phần thưởng không ít hơn phần thưởng của bạn Đọc nhiều nhất
Đệ quy
xếp sau mình (có thể số phần thưởng = 0), 1<=m,n<= 70. Tính số cách chia Turbo Pascal 7.0 with DOSBox – ph
Lý thuyết đồ thị
phần thưởng. mềm Pascal tương thích mọi Windows
Quy hoạch động
(6198)
Tài liệu giáo trình
Cách phát biểu khác của bài toán: Có m phần thưởng được chia cho n học sinh Bài toán kiểm tra số nguyên tố (3376)
Hợp ngữ
giỏi được xếp hạng thừ 1 đến n. Tính số cách chia phần thưởng sao cho thỏa các điều Chạy Turbo Pascal trên Windows 64 bit
MIPS (3350)
kiện sau:
Tài liệu giáo trình Làm thế nào để học tốt CNTT ở tr
Pascal học? (2789)
• Số phần thưởng của học sinh hạng i phải lớn hơn hoặc bằng số phần thưởng của
Tài liệu giáo trình Giáo trình Cấu trúc dữ liệu và giải thu
học sinh hạng j nếu j>i.
Phần mềm (2578)
• Tất cả phần thưởng đều phải được thưởng hết cho học sinh.
C / C++ Microsoft Visual Studio 2005, 2008 và

Hợp ngữ 2010 (2499)


Ví dụ: Có 7 phần thưởng chia cho 4 học sinh sẽ có 11 cách chia sau: Ebook Sáng tạo trong thuật toán và l
Pascal
trình (2387)
Tài liệu giáo trình
Phong cách lập trình C++ (2084)
C#

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 2 of 9

Cấu trúc dữ liệu Các phần mềm Pascal (1976)


và giải thuật Tư duy lập trình (1770)
Kĩ thuật lập trình
Kiến trúc máy
Đọc nhiều hôm nay
tính và hợp ngữ
Lập trình hướng Turbo Pascal 7.0 with DOSBox – ph
đối tượng mềm Pascal tương thích mọi Windows
Lập trình Web (118)

Lý thuyết đồ thị Bài toán kiểm tra số nguyên tố (74)

Nhập môn lập 5 Cách để học lập trình nhanh hơn


trình Ways you can Learning Programming
1. Phương pháp quy hoạch động:
Faster (73)
Pascal
Gọi C[i,j] là số các chia i phần thưởng cho j học sinh, ta có một số nhận xét sau: Microsoft Visual Studio 2005, 2008 và
Tổng quan
• Có i phần thưởng mà chia cho 0 học sinh thì có 0 cách chia (vì không thỏa 2010 (72)

điều kiện: Tất cả phần thưởng đều phải được thưởng hết cho học sinh). Làm thế nào để học tốt CNTT ở tr
Bài viết mới học? (71)
Vậy với mọi i, C[i,0]=0.
Giáo trình Cấu trúc dữ liệu và giải thu
Những lỗi thường • Có 0 phần thưởng mà chia cho j học sinh thì có 1 cách chia (không ai có phần
(60)
gặp khi mới bắt đầu thưởng cả). Vậy với mọi j, C[0,j]=1.
Chạy Turbo Pascal trên Windows 64 bit
lập trình C++
• Nếu số phần thưởng (i) ít hơn số học sinh (j) thì những học sinh thứ i+1 đến (53)
5 Cách để học lập
j sẽ không có phần thưởng, do đó số cách chia i phần thưởng cho j người sẽ Ebook Sáng tạo trong thuật toán và l
trình nhanh hơn – 5
bằng số cách chia i phần thưởng cho i người . Vậy với mọi i<j, C[i,j]=C[i,i]. trình (45)
Ways you can
Learning • Nếu số phần thưởng (i) nhiều hơn hoặc bằng số học sinh (j) thì có 2 Phong cách lập trình C++ (43)
Programming Faster trường hợp: Những lỗi thường gặp khi mới bắt
Cấu trúc file bitmap, + TH1: người cuối cùng không có phần thưởng, tức là chỉ chia i phần thưởng cho trình C++ (40)
đọc và xử lý file j-1 người, trường hợp này số cách chia là C[ i ][ j-1 ].
bitmap
+ TH2: người cuối cùng chắc chắn có phần thưởng, khi đó ta sẽ lấy j phần
Bài toán mã đi tuần
thưởng chia cho j người, mỗi người sẽ có được 1 phần thưởng trước, lúc này còn
Giáo trình Kỹ thuật
lại i-j phần thưởng, tiếp tục lấy số còn lại này chia cho j người, trường hợp này số
lập trình 2 – Khoa
CNTT – ĐH KTCN
cách chia là C[i-j][j].
Như vậy với mọi i>=j, C[ i ] [ j ] = C[ i ][ j-1 ] + C[ i-j ][ j ].

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 3 of 9

Tìm kiếm file và Cài đặt bằng ngôn ngữ Pascal: Nhà tài trợ
folder bằng ngôn PROGRAM chia_phan_thuong;
ngữ Pascal
VAR C:ARRAY[0..70,0..70] OF LONGINT;
Phong cách lập trình
m,n,i,j:INTEGER;
– Đặng Bình Phương
– ĐHKHTN
BEGIN

Bài toán bảy cây cầu write('So phan thuong: '); readln(m);
Euler write('So hoc sinh: '); readln(n);
Ma phương – ma FOR i:=1 TO m DO C[i,0]:=0;
trận kì ảo FOR j:=1 TO n DO C[0,j]:=1;
Giáo trình lập trình FOR i:=1 TO m DO
Pascal nâng cao
FOR j:=1 TO n DO
IF i<j THEN
C[i,j]:=C[i,i]
ELSE
C[i,j]:=C[i,j-1] + C[i-j,j];
writeln('So cach chia: ',C[m,n]);
readln
END.
Cài đặt bằng ngôn ngữ C++
#include <iostream>
using namespace std;
int m,n;
int C[71][71];

int main()
{
cin>>m>>n;
int i,j;
for (i=1; i<=m; i++) C[i][0]=0;

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 4 of 9

for (j=1; j<=n; j++) C[0][j]=1;


for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
if (i<j)
C[i][j] = C[i][i];
else
C[i][j] = C[i][j-1] + C[i-j][j];
cout<<C[m][n]<<endl;
return 0;
}
2. Phương pháp vét cạn:
Cài đặt bằng ngôn ngữ Pascal:
PROGRAM chia_phan_thuong;
VAR m,n,r:LONGINT;
P:ARRAY[0..70] OF LONGINT;

PROCEDURE Chia(i,j:LONGINT); {Chia i phan thuong cho nhung nguoi


tu vi tri thu j}
VAR k:INTEGER;
BEGIN
IF (j>n) THEN {Da xet xong n nguoi}
BEGIN
IF i=0 THEN {Chia het toan bo phan thuong}
BEGIN
inc(r);{Tang so cach chia}
FOR k:=1 TO n DO write(P[k],' ');{Xuat ra mot cach
chia}
writeln;
END;

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 5 of 9

END
ELSE
FOR k:=P[j-1] DOWNTO 0 DO {So phan thuong cua nguoi sau
phai nho hon hoac bang cua nguoi truoc}
IF i-k>=0 THEN {So phan thuong con lai phai khong am}
BEGIN
P[j]:=k;
Chia(i-k,j+1); {Chia so phan thuong con lai cho
nhung nguoi sau.}
END;
END;

BEGIN
readln(m,n);
r:=0;
P[0]:=m;
Chia(m,1);
writeln('Co ',r,' cach chia!');
readln;
END.
Cài đặt bằng ngôn ngữ C++
#include <iostream>
using namespace std;
int m,n,r;
int P[71];

void Chia(int m, int n)


{
if (n>::n)

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 6 of 9

{
if (m==0)
{
r++;
for (int i=1; i<=::n; i++) cout<<P[i]<<" ";
cout<<endl;
}
}
else
for (int i=P[n-1]; i>=0; i--)
if (m-i>=0)
{
P[n]=i;
Chia(m-i,n+1);
}
}

int main()
{
cin>>m>>n;
r=0;
P[0]=m;
Chia(m,1);
cout<<"Co "<<r<<" cach chia!"<<endl;
return 0;
}

Bài viết liên quan:

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 7 of 9

1. Bài toán di chuyển từ Tây sang Đông


2. Dãy số Fibonacci và bài toán nuôi thỏ
3. Bài toán tìm chuỗi con chung dài nhất
4. Bài toán đường đi của robot tạo thành số nhị phân lớn nhất
5. Phân tích một số ra thừa số nguyên tố
6. Giải thuật chia để trị với bài toán tìm Max Min
7. Các phép tính với số nguyên lớn
8. Phân tích n giai thừa (n!) ra thừa số nguyên tố
9. Bài toán dãy con đơn điệu tăng dài nhất
10. Ma phương – ma trận kì ảo

(Đã đọc 418 lần, 15 hôm nay)

Để lại trả lời

Tên (bắt buộc)

Thư điện tử (bắt buộc)

Trang web

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 8 of 9

Xác nhận
*

Visual HTML

Định dạng Khổ chữ

Đường dẫn:

Đăng bình luận

Bài toán di chuyển từ Tây sang Đông Bài toán mã đi tuần

© 2011 KĨ THUẬT LẬP TRÌNH Hosted by vData Suffusion theme by Sayontan Sinha

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011
Bài toán chia phần thưởng | KĨ THUẬT LẬP TRÌNH Page 9 of 9

Lịch sử đăng bài Thông tin trang Liên kết

Duy Khánh's Blog


Tháng Mười 2011
Điểm thi đại học 24/7/365
T2 T3 T4 T5 T6 T7 CN Lớp CT1001
1 2 Maketing online | rao vat mien phi
3 4 5 6 7 8 9 MicrosoftTech.Net
10 11 12 13 14 15 16 Mùa tóc rối
17 18 19 20 21 22 23 Phần mềm V-Pascal
24 25 26 27 28 29 30 Thư viện tài liệu
31
« Tháng 9

http://kithuatlaptrinh.tk/giai-thuat-va-lap-trinh/quy-hoach-dong/bai-toan-chia-phan-thuong 10/17/2011

You might also like