1. Trang chủ
  2. » Công Nghệ Thông Tin

Số lượng giá trị khác nhau trong mảng

2 4 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 2
Dung lượng 171,94 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài tập Cho dãy số nguyên dương {A} có n phần tử, hãy cho biết số lượng giá trị khác nhau trong dãy và giá trị có số lần lặp nhiều nhất (nếu có nhiều hơn một thì chọn giá trị nhỏ nhất) INP Dòng thứ nhất chứa n ( 5101  n ) Dòng tiếp theo là dãy {A} n phần tử cách nhau ( 1 Ai 510.

Trang 1

Lưu ý: Tài liệu chỉ mang tính chất tham khảo, nếu có trường hợp chưa đúng đắn

có thể điều chỉnh, xin cảm ơn.

Tài liệu tham khảo từ Tài liệu giáo khoa tin Chuyên tin quyển 1(Dỗ Đức Đông-Lê Minh Hoàng-Nguyễn Thanh Tùng)

Bài tập: Cho dãy số nguyên dương {A} có n phần tử, hãy cho biết số lượng giá trị

khác nhau trong dãy và giá trị có số lần lặp nhiều nhất (nếu có nhiều hơn một thì chọn giá trị nhỏ nhất).

.INP: -Dòng thứ nhất chứa n. ( 1  n  105)

-Dòng tiếp theo là dãy {A} n phần tử cách nhau ( 1  A[i]  105)

.OUT: -Dòng thứ nhất chứa số lượng giá trị khác nhau.

-Dòng thứ hai chứa giá trị có số lần lặp nhiều nhất.

6

15

6 7 100 2 14 14 7 100 9 4 4 9 2 99 9 8 9

Hướng dẫn tham khảo:

- Dùng mảng đánh dấu {F} :

+Gọi F[t] là số lần lặp của giá trị t, ( F[t] + 1) khi gặp t.

+Ban đầu F[t] = 0 (giá trị t chưa gặp nên = 0).

+Ta duyệt mảng {A}, mổi lần ta có giá trị A[i] thì ta cộng F[A[i]] thêm 1 +Để tính số lượng(dem) giá trị khác nhau da duyệt mảng F, nếu F[t] khác 0 có nghĩa là có giá trị t trong dãy (dem ++).

+Để tìm giá trị có lần lặp max thì ta tìm F[t]max và điều kiện t min.

Code tham khảo:

Const Nmax = 100000;

procedure GTMin();

var i, t, dem, res, dmax:longint;

F:array[1 Nmax] of longint;

begin

for i:= 1 to Nmax do // Ban đầu rỗng

F[i]:= 0;

for i:= 1 to n do // Đánh dấu giá trị a[I] có trong dãy

inc( F[a[i]] );

dem:= 0;// số lượng giá trị khác nhau

res:= 0;// giá trị min có số lần lặp max

dmax:= 0;//số lần lặp max

for t:= 1 to Nmax do

if F[t] <> 0 then //giá trị t có trong dãy lặp F[t] lần

begin

inc(dem);

if dmax < F[t] then

begin

slmax:= F[t];

res:= t;

end;

end;

writeln(sl);

write(res);

end;

Trang 2

- Ta sắp xếp dãy {A}, khi đó các giá trị giống đứng cạnh nhau.

Khi đó ta chỉ cần đếm số lượng giống của giá trị A[i] ta nhận được số lần lặp của A[i].

Mỗi lần như thế ta tăng số lượng giá trị khác nhau và so sánh để tìm giá trị có số lần lặp max.

Code tham khảo:

procedure QuickSort(L,H:longint);

var i,j :longint;

x,tmp :longint;

begin

i:=L;

j:=H;

x:=a[(L+H) div 2];

repeat

while a[i]<x do inc(i);

while a[j]>x do dec(j);

if i<=j then

begin

tmp:=a[i];

a[i]:=a[j];

a[j]:=tmp;

inc(i);

dec(j);

end;

until i>j;

if L<j then QuickSort(L,j);

if i<H then QuickSort(i,H);

end;

function countValue():longint;//số lượng giá trị khác nhau var i,count :longint;

begin

count:=1;

for i:=2 to n do

if a[i-1]<>a[i] then inc(count);

countValue := count;

end;

function highestFrequency():longint;//giá trị có số lần lặp max var i,count,rslt, res :longint;

Begin

rslt:=1;

count:=1;

res := 1;

for i:=2 to n do

begin

if a[i] <> a[i-1] then count:=1

else inc(count);

if count>rslt then

begin

rslt:=count;

res := a[i-1];

end;

end;

highestFrequency := res;

end;

Ngày đăng: 11/07/2022, 14:45

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w