các ac ơi cho hỏi chút.thầy ra cho bọn e đề kiểm tra tin như sau:
cho dãy số nguyên A=a1,a2,...an. một dãy con của A là 1 cách chọn ra trong A một số phần tử giữ nguyên thứ tự.yêu cầu, tìm dãy con đơn điệu tăng của A có độ dài lớn nhất bắt đầu từ a1.

có anh chị nào biết thì giúp e nhé,gợi ý ý tưởng giùm e...Thank các anh các chị rất nhiều.
giải bằng pascal nhé.
 

Angelo

New Member
Thật tình .. chả hiểu cái đề cho lắm >> sau khi mình dùng phần mềm Google 2013 .. vào menu Search Bài toán "Dãy con đơn điệu tăng dài nhất" >> chương trình đã IT sub ra 1 bài viết :


Bài đó dc viết bằng C++

Code: void main()
{
int a[m] = {1,4,5,9,2,6,7,10}; //dãy A
int l[m]; //l: độ dài DCĐĐTDN của dãy a[0],..,a mà có chứa a
int t[m]; //t: vị trí phần tử ngay phía trước a trong DCĐĐTDN của dãy a[0],..,a

// Bước 1. Lập bảng phương án (tính mảng L và T)
l[0] = 1; t[0] = -1;
for (int i=1; i {
int max = 1; //độ dài DCĐĐTDN của dãy a[0],..,a
for (int j=0; j if (a[j] < a && max < l[j] + 1)
{
max = l[j] + 1;
t = j; //để sau này truy vết: phần tử ngay phía sau a là a[j]
}
l = max;
}

//Bước 2. Tìm vị trí cuối của DCĐĐTDN
int lMax = 0; //độ dài DCĐĐTDN của dãy A
int viTriMax = 0; //a[viTriMax] sẽ là phần tử cuối cùng trong DCĐĐTDN của dãy A
for (int i=1; i if (l > lMax)
{
lMax = l;
viTriMax = i;
}

//Bước 3. Truy vết để tìm DCĐĐTDN (kq): dựa vào T và viTriMax
int kq[m];
int k = lMax-1;
do {
kq[k] = a[viTriMax];
k--;
viTriMax = t[viTriMax];
}while (k>=0);

//Bước 4. Xuất kết quả
printf("
- Day A: "); //Hiển thị dãy A
for (int i=0; i);
printf("
- Day con don dieu tang dai nhat: "); //Hiển thị DCĐĐTDN
for (int i=0; i);
printf("
(gom %d phan tu)", lMax);
getch(); //dừng màn hình để xem kết quả
} Nhưng việc viết bằng pascal cũng đơn giản .. bạn này chỉ cần dựa theo nó là viết dc .. code dễ hiểu lắm .. pascal chỉ sửa lại lệnh là ok ! có j thì mình sẽ giải thích .. mặc dù đã bỏ pascal lâu rùi T.T
 

Brantley

New Member
có 1 box về lập trình pascal ở đây



và tui cũng quên pascal từ lâu rồi
 

Các chủ đề có liên quan khác

Top