Tỉa mảng trong pascal

Tỉa mảng : Viết chương trình nhập vào mảng n số nguyên (n < 1000). loại bỏ các phần tử trùng lặp, mỗi phần tử chỉ giữ lại một phần tử đại diện và thứ tự các phần tử không thay đổi.

Dữ liệu vào file: tia.inp Dữ liệu ra file: tia.out
– Dòng 1: chứa số n- Dòng 2 chứa n số cách nhau ít nhất 1 khoảng trắng 1 dòng chứa dãy đã tỉa

 

Ví dụ: Với n =10, dãy A ban đầu được nhập là:7        5        12       5          9        8        3        9          7        5           Dãy A sau khi tỉa là:7        5        12  9   8          3
Ý tưởng: Sử dụng một mảng “danhdau” để đánh dấu những phần tử trùng

7 5 12 5 9 8 3 9 7 5
x x x x

– Đầu tiên không đánh dấu phần tử nào- Duyệt từ phần từ 1 -> n -1- Nếu chưa được đánh dấu (chưa giống phần tử nào trước đó) thì đem phần tử đó so sánh với tất cả các phần tử sau nó. Nếu gặp phần tử giống nó thì “đánh dấu” phần tử đóXuất kết quả: Duyệt qua tất cả các phần tử của mảng, phần tử nào không được đánh dấu thì xuất ra.

Chú ý: Bài toán có thể thay cách hỏi: tỉa bỏ hết các số nguyên tố, số chính phương, …

Code 1

var i,j,n:integer; a:array[1..1000]of integer;danhdau:array[1..1000]of boolean;
      f:text;
begin
{----Doc file ----}
    assign(f,'tia.inp'); reset(f);
    readln(f,n);
    for i:=1 to n do read(f,a[i]);
    close(f);
{----------danh dau phan tu trung lap--------}
        for i:=1 to n do danhdau[i]:=false;
     	for i:=1 to n-1 do
         if danhdau[i]=false then
            for j:=i+1 to n do
                if a[j]=a[i] then danhdau[j]:=true;
{----xuat ket qua-----}
    	assign(f,'tia.out'); rewrite(f);
 	for i:=1 to n do
         if danhdau[i]=false then write(f,a[i],' ');
close(f);
end.

Code 2

var i,j,kn:integer; a:array[1..1000]of integer;danhdau:array[1..1000]of boolean;
      f:text;
begin
{----Doc file ----}
    assign(f,'tia.inp'); reset(f);
    readln(f,n);
    for i:=1 to n do read(f,a[i]);
    close(f);
{------------------}
   i:=2;
   While i <= n Do
      Begin
         j:=1;
         While a[j] <> a[i] Do j:=j+1;
         If j < i Then
            Begin
               For k:=i to n-1 Do
                  a[k]:= a[k+1];
               n:=n-1;
            End
         Else
            i:=i+1;
      End;
{----xuat ket qua-----}
    	assign(f,'tia.out'); rewrite(f);
  	For i:=1 to n Do
      		Write(f,a[i]:8);
 	close(f);
End.

 

Read:   Trang điểm cho hình vẽ trong Latex
Hình đại diện của người dùng

admin

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *