Ngày 8/3/2009 Bài tập Pascal Bài 1: Số đơn điệu Định nghĩa: Các số nguyên dương luân phiên tăng giảm hoặc giảm tăng được gọi là các số đơn điệu.. Dữ liệu: DuLieu.Vao Kết quả: KetQua.Ra V
Trang 1Ngày 8/3/2009 Bài tập Pascal
Bài 1: Số đơn điệu
Định nghĩa: Các số nguyên dương luân phiên tăng giảm hoặc giảm tăng được gọi là các số đơn điệu.
Ví dụ: 4537 vì 4 < 5 > 3 < 7
Yêu cầu: Viết chương trình xác định số chữ số đầu tiên lớn nhất tạo thành số đơn điệu của một số cho trước.
Dữ liệu: DuLieu.Vao
Kết quả: KetQua.Ra
Ví dụ:
*Phân tích tìm thuật giải:
- Các dạng số đơn điệu: Có 2 dạng phụ thuộc vào hai chữ số đầu
- Dạng 1:
Chữ số thứ nhất lớn hơn chữ số thứ hai Ví dụ: 7564 Đặt: a1=7; a2=5; a3=6; a4=4 Ta có: a1 > a2; a2 < a3; a3 > a4 Gọi i là chữ số thứ i Khi đó:
If i mod 2 <> 0 then a[i] > a[i+1]
If i mod 2 = 0 then a[i] < a[i+1]
- Dạng 2:
Chữ số thứ hai lớn hơn chữ số thứ nhất Ví dụ: 5746 Đặt: a1=5; a2=7; a3=4; a4=6 Ta có: a1 < a2; a2 > a3; a3 < a4 Gọi i là chữ số thứ i Khi đó:
If i mod 2 <> 0 then a[i+1] > a[i]
If i mod 2 = 0 then a[i+1] < a[i]
*Từ đó ta có chương trình
Var
xau : string; i, n : integer;
kt : boolean;
so1, so2,x1,x2, z : integer;
St1 : Text; St2: Text;
begin
Assign(St1,”dulieu.Vao”); Reset(St1); if not eof(St1) then read(St1,xau); close(St1);
kt:=false; i:=1; n:=1;
if length(xau)>1 then
begin
repeat
i:=i+1;
if i=length(xau) then kt:=true;
if i<length(xau) then
val(xau[i],so1,z); val(xau[i+1],so2,z); val(xau[1],x1,z); val(xau[2],x2,z);
if x1>x2 then
if i mod 2 = 0 then if so2>so1 then n:=n+1 else begin n:=n+1; kt:=true; end;
if i mod 2 <> 0 then if so1>so2 then n:=n+1 else begin n:=n+1; kt:=true; end;
if x2>x1 then
if i mod 2 = 0 then if so1>so2 then n:=n+1 else begin n:=n+1; kt:=true; end;
if i mod 2 <> 0 then if so2>so1 then n:=n+1 else begin n:=n+1; kt:=true; end;
until KT;
write(n);
Assign(St2,”Ketqua.ra”); Rewrite(St2); Write(St2, n); Close(St2);
end;
readln
end