View Single Post
Old 29-04-2008, 08:18   #2
hungson215
Gà Con
 
hungson215's Avatar
 
Tham gia: Nov 2007
Bài: 2
VZD: 220
Điểm: 0/0 bài viết
Default

Mình ko có học Pascal nhưng mình sẽ đưa ra cách giải:
-để chèn x vào vị trí Vt thì bạn phải dời các phần tử từ V(t)->V(n) "qua phải" tức là V(n+1)=V(n) , V(n)=V(n-1) ,....., V(t+1)=V(t) . Sau đó bạn gán V(t)=x.
-Để xóa phần tử tại vị trí V(t) thì bạn dịch chuyển các phần tử từ V(t+1)->V(n) "qua trái" tức là V(t)=V(t+1) ,......, V(n)=V(n+1).
-Để chèn x vào mảng sao cho vẫn đảm bảo tăng dần thì bạn chỉ cần so sánh x với từng phần tử trong mảng theo thứ tự từ "trái" qua "phải" hoặc ngược lại để tìm vị trí V(t) sau đó chèn x vào vị trí V(t). (Để giảm số lần so sánh bạn nên so sánh với phần tử ở giữa mảng có vị trí V(n/2) (nhớ lấy giá trị nguyên) ).
-Xóa phần tử X trong dãy số là tổng hợp 2 cách trên nên mình để bạn tự suy nghĩ.
-Để trộn 2 mảng tăng dần mình sẽ giả sử:
2 mảng cần trộn là A và B có số phần tử tương ứng là x và y
Mảng sau khi trộn là C có số phần tử là n=x+y;
Mình sẽ làm như sauMình sẽ viết code bằng ngôn ngữ C mình nghĩ nó cũng tương tự pascal)

int a=b=i=0; //Trong C mảng đánh số từ 0 chứ ko phải từ 1 như
//trong pascal
while(i<n) //Chắc bạn biết đến vòng lặp này
{ //Câu lệnh if này gần giống trong Pascal
if(a == x) //Dấu này "==" là dấu so sánh bằng
C(i) = B(b); //Đây là phép gán chứ ko phải dấu bằng.
else if(b == y)
C(i)=A(i);
else if(A(a)<B(b))
{
C(i)=A(x);
a=a+1; //Biểu thức này nghĩa là tăng giá trị của a lên 1
}
else
{
C(i)=B(y);
y=y+1;
}
i=i+1;
}
*Cách của mình trên đây chỉ là tham khảo

thay đổi nội dung bởi: hungson215, 29-04-2008 lúc 09:20.
hungson215 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn