1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài tập chuyên đề mảng tin học THCS

9 348 5

Đ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 9
Dung lượng 78,5 KB

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

Nội dung

So sánh giá trị của 2 phần tử, nếu phần tử nào nhỏ hơn thì ghi vào mảng C, sau đó tiếp tục lấy ra 1 phần tử từ mảng chứa số vừa ghi vào mảng C đó và so sánh với số chưa được ghi cho đến

Trang 1

Bài toán 5: Trộn 2 mảng A gồm N phần tử và mảng B gồm M phần tử đã được sắp xếp tăng thành

1 dãy cũng được sắp xếp tăng Ví dụ: Cho mảng A: 1 3 5 7 8 ; B: 2 3 6 9 10 14 thì ta được dãy C: 1 2 3 3 6 7 8 9 10

Ý tưởng: + Lấy lần lượt từng phần tử từ 2 mảng A và B ra So sánh giá trị của 2 phần tử, nếu phần tử nào nhỏ hơn thì ghi vào mảng C, sau đó tiếp tục lấy ra 1 phần tử từ mảng chứa số vừa ghi vào mảng C đó và so sánh với số chưa được ghi cho đến khi một hoặc cả 2 mảng A và B được lấy hết.

+ Nếu 1 trong 2 mảng còn một số phần tử chưa được lấy ra thì ta tiếp tục lấy rồi ghi vào mảng C.

Đoạn chương trình xử lý:

program mang;

uses crt;

var m,n,x,i,j:longint; a,b:array[1 50] of longint;

c:array[1 100]of longint; Begin

clrscr;

write('nhap so phan tu mang a la n:');readln(n);

write('nhap so phan tu mang b la m:');readln(m);

for i:=1 to n do

begin

write('a[',i,']=');read(a[i]);

end;

for j:=1 to m do

begin

write('b[',j,']=');read(b[j]);

end;

x:=0;i:=1;j:=1;

repeat

if a[i]<b[j] then

begin

x:=x+1;

c[x]:=a[i];

i:=i+1;

end

else begin

x:=x+1;

c[x]:=b[j];

j:=j+1;

end;

until (i>n) or (j>m);

while i<=n do begin x:=x+1;c[x]:=a[i]; i:=i+1; end;

while j<=m do begin x:=x+1;c[x]:=b[j]; j:=j+1; end;

for i:=1 to x do write(c[i],' '); readln;

readln

End.

Bài tập 1:

Nhập một dãy A (mỗi số chỉ xuất 1 lần) có N (< 40) số tự nhiên và 1 số K Hãy xuất ra các phần tử có số lần xuất hiện trong dãy A từ K lần trở lên

Dữ liệu nhập: file DAYSO.INP:

- Dòng 1: 2 số n và k cách nhau bởi 1 dấu cách

Trang 2

- Dòng 2: dãy A.

Dữ liệu ra: file DAYSO.OUT: Xuất các số thỏa điều kiện trên

{In phan tu xuat hien k lan tro len}

var i,j,k,n,tg,x,y:integer;

a:array[1 50] of integer;

b:array[1 100] of integer;

f,g:text;

begin

assign(f,'mang.inp'); assign(g,'mang.out');

reset(f); rewrite(g);

read(f,n); readln(f,k);

for i:=1 to n do read(f,a[i]);

fillchar(b,sizeof(b),0);

for i:=1 to n-1 do

for j:=i+1 to n do

if a[i]>a[j] then

begin

tg:=a[i];

a[i]:=a[j];

a[j]:=tg;

end; x:=a[1]; y:=a[n];

{vì nếu giá trị của phần tử của mảng a lớn hơn số phần tử n thì số phần

tử của mảng b lớn hơn n Cụ thể bằng Max(a[i]))

for i:=1 to n do inc(b[a[i]]);

for i:=x to y do if (b[i]<>0) and (b[i]>=k) then write(g,i,' ');

close(f); close(g);

end.

Bài 2 (Đề Tin học trẻ 2014-2015) Dãy đối xứng

Cho một dãy gồm N số nguyên a1, a2, …, aN; mỗi số có giá trị tuyệt đối không quá 10 4

Yêu cầu: Hãy tìm dãy con đối xứng dài nhất trong dãy đã cho (Dãy con là dãy các phần

tử liên tiếp có từ 2 phần tử trở lên)

Dữ liệu vào từ file văn bản DAYDX.INP:

 Dòng đầu tiên chứa số nguyên dương N (1 N  103 ).

Dòng tiếp theo, chứa các số nguyên a i ( i 1 N ), mỗi số cách nhau một dấu cách.

Trang 3

Kết quả ghi ra file văn bản DAYDX.OUT trên một dòng duy nhất hai số p, q cách nhau

một dấu cách là vị trí bắt đầu dãy con và dộ dài của dãy con đó, nếu không có dãy con đối xứng ghi ra số 0 (Trong trường hợp có nhiều dãy con thỏa mãn, thì ghi dãy con đầu tiên tìm được)

Ví dụ:

10

1 2 1 12 13 15 13 12 4 9

4 5

7

1 2 3 4 5 6 7

0

Giải thích ví dụ: Dãy con đối xứng dài nhất là: 12 13 15 13 12 bắt đầu từ vị trí 4 có độ dài 5

Viết chương trình Pascal có tên Bai3.pas giải bài toán sau:

Trong dịp khai trương mùa du lịch Cửa Lò Một lớp cựu học sinh gồm n bạn tổ chức gặp mặt Biết rằng khoảng thời gian mà bạn thứ i có mặt tại địa điểm gặp là [a i , b i]

(a i <b i tương ứng là các thời điểm đến và rời khỏi địa điểm gặp mặt) Cô giáo chủ nhiệm

đã nhận lời mời tham gia buổi gặp mặt Hãy giúp cô giáo chủ nhiệm xác định thời điểm đến, sao cho tại thời điểm đó cô giáo có thể gặp được nhiều bạn trong lớp nhất.

Dữ liệu: Vào từ file văn bản LUACHON.INP:

Dòng đầu tiên ghi số nguyên dương n (n  1000);

· Dòng thứ i trong số n dòng tiếp theo ghi 2 số nguyên không âm ai,

bi tương ứng với thời gian đến và đi của người thứ I ( i = 1, 2, , n.)

Kết quả: Ghi ra file văn bản LUACHON.OUT:

Dòng đầu tiên ghi số nguyên dương k là số lượng người đang có mặt ở địa điểm tổ chức, tại thời điểm cô giáo đến;

Trong k dòng tiếp theo ghi chỉ số của k bạn có mặt ở địa điểm tổ chức, tại thời điểm cô giáo đến, mỗi dòng ghi một chỉ số của một bạn.

Ví dụ:

LUACHON.INP LUACHON.OUT LUACHON.INP LUACHON.OUT

6

1 2

2 3

2 5

5 7

6 7

9 11

3 1 2 3

5

1 2

3 5

7 9

11 15

17 21

1 1

uses crt;

type mang=array [1 100] of integer;

Trang 4

const t1='luachon.inp';

t2='luachon.out';

var f,g:text;

a,b:mang ;

n,i,j,max,min,d,k,vt,imax:integer;

{==================================} Begin

assign(f,t1);reset(f);

assign(g,t2);rewrite(g);

readln(f,n);

for i:=1 to n do

begin

read(f,a[i]);

readln(f,b[i]);

end;

max:=1;min:=a[1];

for i:=1 to n do

begin

if b[i]>max then max:=b[i];

if a[i]<min then min:=a[i];

end;

imax:=1;k:=0;

for d:=min to max do

begin

for i:= 1 to n do

if (d>=a[i]) and (d<=b[i]) then k:=k+1;

if k> imax then

begin

imax:=k;

vt:=d;

end;

k:=0;

end;

writeln(g,imax);

for i:=1 to n do

if(vt>=a[i]) and (vt<=b[i]) then writeln(g,i); close(f);close(g);

end

Bài 4: Đề thi HSG THPT Hải Dương

Trang 5

Tại một bến xe có n xe đến đậu để đón khách (5 < n < 20) Mỗi xe chỉ đậu tại bến trong một khoảng thời gian nhất định trong ngày (giờ đến - giờ đi) Hãy viết chương trình giúp ban quản lý kiểm soát số lượng xe đậu ở bến tại một thời điểm bất kỳ trong ngày (từ 0 -> 23 giờ) và cho biết thời điểm nào bến tập trung nhiều xe nhất

Dữ liệu vào: file ben.inp

- Dòng đầu cho biết số xe

- N dòng tiếp theo, mỗi dòng ghi 3 số cách nhau khoảng trắng lần lượt là: số thứ tự của xe, giờ đến, giờ đi

- Dòng cuối ghi giờ cần thống kê xe

Dữ liệu ra: file xe.out

- Dòng đầu ghi tổng số xe đang đậu tại bến vào thời điểm thống kê

- Dòng thứ hai ghi số thứ tự của các xe đó cách nhau khoảng trắng

- Dòng tiếp theo ghi thời điểm tại bến có nhiều xe nhất theo dạng: thời gian: số thứ tự của các xe có tại bến cách nhau khoảng trắng (nếu có nhiều thời điểm thì phải liệt kê tất cả)

Bài 5 Số âm lớn nhất Đề HSG THPT Nghệ An

Cho một dãy gồm N số nguyên a1, a2, …, aN, mỗi số có giá trị tuyệt đối không vượt quá 104

Yêu cầu: Hãy tìm số nguyên âm lớn nhất X trong dãy đã cho.

Dữ liệu: Vào từ file văn bản Bai1.inp:

 Dòng đầu tiên chứa số nguyên dương N (1N104);

N dòng tiếp theo, dòng thứ i chứa số nguyên a i

Kết quả: Ghi ra file văn bản Bai1.out: Chỉ một dòng duy nhất là số X tìm

được Trong trường hợp không có lời giải thì ghi ra số 0

5 -4 3 2 -5 7

-4

Trang 6

Đề HSG THPT Nghệ An 2009-2010 Dãy số đặc biệt

Dãy số A1, A2, , AN được gọi là dãy số đặc biệt nếu nó thoả mãn các điều kiện:

 Là dãy số giảm dần;

 Với mỗi Ai thì Ai hoặc là số nguyên tố hoặc là ước của một trong các

số từ A1 đến Ai-1

Em hãy tìm dãy số đặc biệt dài nhất bắt đầu từ N

Dữ liệu vào: Từ file văn bản DAYSO.IN là một số nguyên dương N (N <

10000)

Kết quả: Ghi ra file văn bản DAYSO.OUT là dãy số tìm được, các số ghi

cách nhau bởi dấu cách

Ví dụ:

12 12 11 7 6 5 4 3 2 1

Bài 1 Tổng max

Cho dãy gồm N số nguyên a1, a2,…, an Tìm dãy con gồm một hoặc một số phần tử liên tiếp của dãy đã cho có tổng các phần tử trong dãy là lớn nhất

Dữ liệu vào từ file văn bản TONGMAX.INP

 Dòng đầu tiên chứa một số nguyên dương N (N<106)

 Dòng thứ I trong N dòng tiếp theo chứa số ai (|ai|<1000)

Kết quả ghi ra file văn bản TONGMAX.OUT

 Dòng đầu tiên ghi vị trí của phần tử đầu tiên của dãy con tìm được

 Dòng thứ hai ghi vị trí của phần tử cuối cùng của dãy con tìm được Dòng thứ ba ghi tổng các phần tử của dãy con tìm được

Ví dụ:

const fi='';

fo='';

TONGMAX.INP TONGMAX.OUT

8 12 -14 1 23 -6 22 -34 13

3 6 40

Trang 7

var dau,cuoi:longint;

max,t,n:longint;

f:text;

procedure doc;

begin

assign(f,fi);

reset(f);

readln(f,n);

end;

procedure xuly;

var i,j,x:longint;

begin

dau:=1; cuoi:=1; j:=1;

max:=-maxlongint; t:=0;

for i:=1 to n do

begin

readln(f,x);

t:=t+x;

if t>max then begin max:=t; dau:=j;

cuoi:=i; end;

if t<0 then begin t:=0; j:=i+1; end;

end;

end;

procedure xuat;

begin

assign(f,fi);

rewrite(f);

writeln(f,dau);

writeln(f,cuoi);

writeln(f,max);

close(f);

end;

begin

doc;

xuly;

xuat;

end

Bài: Đề Tin học trẻ Nghệ An 2008

N cháu ở nhà trẻ Hoa sen xếp thành vòng tròn Lấy bạn lớp trởng làm chuẩn gọi là vị trí số 1, vị trí của các bạn tiếp theo đợc xác định khi đếm theo chiều kim đồng hồ Các cháu chơi một trò chơi nh sau: bắt đầu đếm từ bạn

Trang 8

lớp trởng đến khi gặp bạn thứ K thì bạn thứ K bị loại ra khỏi vòng Lại đếm lại bắt đầu từ ngời tiếp theo khi gặp bạn thứ K thì lại loại bạn này ra khỏi vòng Cứ tiếp tục nh vậy cho đến khi chỉ còn lại một bạn trong vòng Hãy cho biết bạn còn lại có vị trí là bao nhiêu

N, K nhập vào từ bàn phím, kết quả đợc ghi vào file Bai2.txt hoặc hiển thị lên màn hình gồm 3 dòng, dòng thứ nhất ghi giá trị N, dòng thứ 2 ghi giá trị K, dòng thứ 3 ghi giá trị vị trí của bạn còn lại

ví dụ: Giá trị N và K đợc nhập vào là: N=5, K=3

kết quả sẻ là:

5 3 4

Bài 2:

uses crt;

var i,n,d,m,k: Integer;

a:array[1 100] of integer;

Begin

clrscr;

write('nhap n=');readln(n);

write('nhap k=');readln(k);

for i:=1 to n do a[i]:=i;

i:=1; d:=0; m:=n;

repeat

if i=n+1 then i:=1;

if a[i] <>0 then d:=d+1;

if d=k then

begin

a[i]:=0;

m:=m-1;

d:=0;

end;

i:=i+1;

Until m=1;

for i:=1 to n do if a[i]<>0 then writeln('vi tri do la:',i);

Trang 9

readln; End

Ngày đăng: 24/07/2018, 20:59

TỪ KHÓA LIÊN QUAN

w