[Cần giúp] Bài tập pascal

tuan linh

New member
Xu
0
Bài tập Pascal

Bài1:
cho dãy số nguyên dương a1, a2, ... ,an.
dãy số ai, ai+1, ... ,aj thỏa mãn ai<= ai+1 <= ...<=aj với 1<=i <=j <=n được gọi là dãy con không giảm của dãy số đã cho.
yêu cầu : trong số các dãy con không giảm của dãy số đã cho mà các phần tử của nó đều thuộc dãy số {uk} xác định bởi u1=1, un=un-1+k, hãy tìm dãy con có độ dài lớn nhất.

Bài 2:
bạn a viết liên tiếp các số tự nhiên từ 1 dến N thành dãy: 1 2 3 4 5 6 ...N. A đố B điền các dấu phép toán + hoặc - vào giữa 2 số tự nhiên liên tiếp sao cho biểu thức thu được có kết quả bằng 0.
yêu cầu : hãy viêt chương trình liệt kê tất cả các cách điền dấu phếp toán thích hợp.
 
Mình sẽ gợi ý thuật toán, còn bạn hãy suy nghĩ tự viết chương trình :)

Bài 1:
Gọi M là độ dài dãy con ko giảm dài nhất, X là độ dài của dãy con tại điểm đang xét. Ban đầu cho M:=0. Rồi duyệt từ đầu dãy số, lúc nào thấy có đoạn có dạng tăng dần thì cho 1 biến X đếm tăng dần lên. Đến khi chạm phải 1 số nhỏ hơn số đứng trước thì dừng, rồi so sánh xem nếu X mà lớn hơn M thì gán M:=X, còn nếu X<=M thì bỏ qua. Nếu đề bài yêu cầu in dãy số này ra nữa thì chỉ cần thêm 1 biến nhớ nữa là j chẳng hạn, với j là số thứ tự của số đầu tiên trong dãy số đó. Mỗi lần mà có X>M thì vừa gán lại M, vừa gán lại j.
--------------------------------
Bài 2:
Tính tổng các số, tổng các số từ 1-->N là N*(N+1)/2. Xem xem cái tổng này là chẵn hay lẻ. Nếu là lẻ thì nghỉ đi, ko bao giờ làm cho nó thành 0 được bằng cách dùng các dấu + và -. Nếu là chẵn thì làm phép quy nạp thôi, tìm tất cả các tổ hợp các số trong đó mà có tổng bằng nửa của N*(N-1)/2. Như vậy lấy tổng của tổ hợp này trừ đi tổng của các số còn lại sẽ đc kết quả bằng 0. Với mỗi trường hợp như vậy có 2 kết quả hiển thị, bằng cách đặt dấu trừ vào nhóm này hay nhóm kia thôi.

Chúc bạn thành công!
 

VnKienthuc lúc này

Không có thành viên trực tuyến.

Định hướng

Diễn đàn VnKienthuc.com là nơi thảo luận và chia sẻ về mọi kiến thức hữu ích trong học tập và cuộc sống, khởi nghiệp, kinh doanh,...
Top