Trên đường thẳng cho trước người ta đánh dấu n điểm khác nhau : A1, A2,..., An (n>=4 ), mỗi điểm được đánh dấu bằng một trong bốn màu: xanh, đỏ, tím, vàng. Mỗi màu được sử dụng ít nhất một lần trong quá trình đánh dấu .
Lập chương trình thực hiện các công việc sau:
a) Nhập thông tin về vị trí các điểm màu dùng để đánh dấu các điểm tương ứng đó từ bàn phím (xanh : X , đỏ : D , tím : T , vàng : V ).
b) Chỉ ra một đoạn thẳng dài nhất trong đó thỏa mãn: Có đúng hai màu, mỗi màu xuất hiện đúng một lần và hai màu còn lại, mỗi màu xuất hiện ít nhất một lần (nếu có nhiều đoạn thỏa mãn thì đọc ra tất cả các đoạn thẳng đó mỗi đoạn trên một dòng)
Ví dụ:
Dãy A Đọc ra màn hình
T V V D T V D X T V DOAN THOA MAN DAI NHAT LA:
V V D T V D X
Lời giải tham khảo
USES CRT;
var n,k,i,j,c,d1,h,max:integer;
d,dau,cuoi:array[1..255] of integer;
MAU: string;
BEGIN
CLRSCR;
write('Vao day mau la cac ky tu in hoa: ');readln(MAU);
WRITELN(************************);
i:=1;
repeat
j:=4;
repeat
for k:=1 to 4 do d[k]:=0;
for k:=i to j do
begin
if (MAU[k]='X') then inc(d[1]);
if (MAU[k]='D') then inc(d[2]);
if (MAU[k]='T') then inc(d[3]);
if (MAU[k]='V') then inc(d[4]);
end;
if((d[1]=1)and(d[2]=1)and(d[4]<>0)and(d[3]<>0))
or ((d[1]=1)and(d[3]=1)and(d[2]<>0)and(d[4]<>0))
or ((d[1]=1)and(d[4]=1)and(d[2]<>0)and(d[3]<>0))
or((d[3]=1)and(d[2]=1)and(d[1]<>0)and(d[4]<>0))
or((d[4]=1)and(d[2]=1)and(d[1]<>0)and(d[3]<>0))
or((d[3]=1)and(d[4]=1)and(d[2]<>0)and(d[1]<>0))
then
begin
inc(h);
if j-i+1 >max then max:=j-i+1;
dau[h]:=i;cuoi[h]:=j;
end;
inc(j);
until j>length(MAU);
inc(i);
until i>length(MAU);
if h>0 then
begin
write(' Doan mau thoa man la:');
for i:=dau[1] to cuoi[1] do write(MAU[i]);writeln;
for i:=1 to h do
begin
if cuoi[i]-dau[i]+1=max then
begin
write(' Doan mau dai nhat thoa man la:');
for j:=dau[i] to cuoi[i] do write(MAU[j]);writeln;
end;
end;
end
else writeln('Khong co doan mau nao thoa man.');
readln
No comments:
Post a Comment
Cảm ơn bạn đã nhận xét