Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Đề bài: Cho dãy con gồm N phần tử, hãy tìm ra dãy con tăng dần gồm nhiều phần tử nhất.
- Dữ liệu vào được lấy từ tệp input.txt, tệp này gồm 2 dòng
- + dòng 1 : chứa số N
- + dòng 2: chứa N số nguyên, các số cách nhau ít nhất 1 dấu cách và có giá trị trong phạm vi từ [0, 100000]
- kết quả tìm được đưa ra tệp output.txt gồm 2 số là vị trí bắt đầu dãy con và độ dài của nó, các số cách nhau bởi 1 dấu cách
- trong trường hợp có nhiều dãy con tăng cùng có độ dài lớn nhất thì đưa ra vị trí nhỏ nhất
- |-------------------------------------------------------|
- | input.txt | output.txt |
- |-------------------------------------------------------|
- |10 |1 3 |
- |6 8 9 2 4 6 4 2 3 1 | |
- |-------------------------------------------------------|
- function kt(b: mang;m,l:word): boolean;
- var ok: boolean; {biến này sẽ cho biết dãy có là dãy tăng hay không, ok = true (dãy tăng), ok = false (dãy không tăng)}
- i:word; {hãy thử bỏ dòng này và chạy kết quả xem sao nhá}
- begin
- ok :=true; {giả sử ban đầu nó là dãy tăng}
- i:=m;
- while ok and (i<m+l-1) do { ở đây ta so sánh phần tử thứ i và phần tứ thứ i +1 nên i chỉ chạy đến m+l-1}
- if b[i] > b[i+1] then ok := false {chỉ cần 1 phần tử lớn hơn phần tử đứng sau thì ta kết luận được ngay dãy không là dãy tăng (ok:=false)}
- else inc(i);
- kt := ok; {cuối cùng dãy tăng hay không phụ thuộc vào biến ok }
- end;
- {từ bài này, hãy vận dụng làm các bài sau:
- Bài 1: Hãy sửa bài trên để đưa ra vị lớn nhất
- |-------------------------------------------------------|
- | input.txt | output.txt |
- |-------------------------------------------------------|
- |10 |4 3 |
- |6 8 9 2 4 6 4 2 3 1 | |
- |-------------------------------------------------------|
- Bài 2: Đưa ra dãy con dài nhất mà các phần tử cùng dấuif a[i]
- Bài 3: Đưa ra dãy con dài nhất mà các phần tử đan dấu (trái dấu)
- Bài 4: Tìm dãy con có tăng (hoặc giảm) có tổng lớn nhất
- }
Advertisement