Tải bản đầy đủ (.ppt) (16 trang)

bai Kieu xau

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (312.59 KB, 16 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1></div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

Bài 1

.

<i><b>Tìm phần tư lín nhÊt cđa d·y sè nguyªn (víi n </b></i>

<i><b> 250 vµ A[i] </b></i>


<i><b> 500), nÕu d·y cã nhiỊu phÇn tư cïng giá trị thì đ a ra chØ sè cđa </b></i>


phÇn tư lín nhất đầu tiên.



*

INPUT

:

Nhập số nguyên d ơng n và dÃy n số nguyên d ơng
a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>.


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

Quả này
lớn nhất


Quả này
mới lớn


nhất


ồ! Quả này
lớn hơn
Tìm ra quả
lín nhÊt råi!


thuËt toán tìm max



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

<b>1. Nhập n và d y a</b>· <b><sub>1</sub>,...,a<sub>n</sub>;</b>


<b>2. Max  a1 ; i  1; </b>


<i><b>3. NÕu i>N ® a ra MAX vµ </b></i>
<b>chØ sè i => KÕt thóc;</b>


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

<b>1. NhËp n vµ d y a</b>· <b><sub>1</sub>,...,a<sub>n</sub>;</b> <b>Write(‘ Nhap vao so luong phan tu:’);</b>



<b>Readln(n);</b>


<b>For i:=1 to n do </b>
<b> begin</b>


<b> write(‘ Phan tu thu ’ ,i, ’ = ’);</b>
<b> readln(a[i])</b>


<b> end;</b>


<b>2. Max  a1 ; i  1; </b> <b><sub> </sub><sub>Max:=a[1]</sub><sub>; csmax:=1; </sub></b>


<b> For i :=2 to n do </b>


<b>IF a[i]>max then </b>
<b>begin</b>


<b> max:=a[i];</b>


<b> csmax:=i;</b>
<b>end;</b>


<i><b>3. NÕu i>N ® a ra MAX vµ </b></i>
<b>chØ sè i => KÕt thóc;</b>


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

<b>Program Tim_Max;</b>


<b>Uses crt;</b>


<b>Type dayso = Array[1..250] of integer;</b>



<b>Var</b>


<b> A : dayso ;</b>
<b> i,n,max,csmax : integer;</b>


<b>BEGIN</b>


<b> Clrscr;</b>


<b> write(‘ Nhap vao so phan tu cua day so : ’) ;</b>
<b> readln(n) ;</b>


<b> For i := 1 to n do </b>
<b>Begin</b>


<b> write(‘ Phan tu thu ‘,i,’ = ‘) ;</b>
<b> readln(A[i]) ;</b>


<b>End;</b>
<b> Max := A[1[ ; csmax :=1 ;</b>


<b> For i := 1 to n do </b>


<b>If (A[i]>max) Then</b>


<b> begin</b>


<b> max := a[i];</b>
<b> csmax=i;</b>


<b> end;</b>


<b> Writeln(‘ Gia tri cua phan tu Max : ’,Max) ;</b>
<b> Writeln(‘ Chi so cua phan tu Max : ’, csmax) ;</b>
<b> Readln ;</b>


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

<b>Nhap vao so phan tu cua day so :</b> <b>7</b>


<b>Phan tu thu 1 = </b> <b>15</b>
<b>20</b>
<b>16</b>
<b>25</b>
<b>18</b>
<b>12</b>
<b>19</b>


<b>Gia tri cua phan tu Max : 25</b>
<b>Chi so cua phan tu Max : 4 </b>


Ch ơng trình chạy và cho kết quả nh sau:



</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

Bài 2.

Nhập vào một dÃy số nguyên, sắp xếp dÃy theo trình tự không


giảm.



*

INPUT

:

Nhập số nguyên d ơng n và dÃy n số nguyên d ơng a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>.


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

<b>3</b>



<b>2</b>




<b>9</b>



<b>7</b>



<b>6</b>



Cho d·y sè sau:

3 2 9 7 6



<b>Giả sử:</b>



<b> Mỗi số đ ợc xem nh một phần tử; </b>



<b>L ợt 1:</b>



<b>ãi chy từ đầu d y đến vị trí </b>ã


<b>[cuèi</b> <b>d y -1]</b>Ã


<b>ãKhi a[i]>a[i+1] tức là phần tử </b>
<b>bên trên nặng hơn phần tử </b>
<b>bên d ới => phần tử trên chìm </b>
<b>xuống và phàn tử bên d ới nổi </b>


<i><b>lờn (</b><b>trỏo i v trớ).</b></i>


<b>ãSau l ỵt thø nhÊt, PhÇn tư cã </b>
<b>träng l ỵng lín nhất sẽ ở vị trí </b>
<b>cuối cùng.</b>


<b> Phần tử thứ i là giá trị của A[i]. </b>




<b>L ợt 2:</b>



<b>ãi chạy từ đầu d y đến vị trí </b>ã


<b>[cuèi d y - 2]</b>· <i><b> (bá qua phÇn </b></i>


<i><b>tư cuối).</b></i>


<b>ãSau l ợt thứ hai phần tư cã </b>
<b>träng l ỵng lín thø hai nằm </b>
<b>sát trên phần tử lớn nhất. </b>
<b> </b>


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

<b> Sè phần tử ở các l ợt duyệt (j) sẽ giảm từ n xuống hai phần tử.</b>


<b> Tại mỗi l ợt duyệt:</b>



<b> - </b>

<b>Cho i chạy từ 1 đến số phần tử -1,</b>


<b> nÕu A[i]>A[i+1] th×</b>


<b>tráo đổi vị trí A[i] và A[i+1]</b>


<b>th«ng qua biÕn trung gian (Tg).</b>


1



<b>For</b>

<b> j := n </b>

<b>downto</b>

<b> 2 </b>

<b>do</b>




2

<b>For</b>

<b> i := 1 </b>

<b>to</b>

<b> j-1 </b>

<b>do </b>



<b>IF</b>

<b> A[i]>A[i+1] </b>

<b>then </b>



<b>Tg := A[i];</b>
<b>A[i] := A[i+1];</b>
<b>A[i+1]:=Tg;</b>


<b>Begin</b>


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

<i><b>Khai báo mảng 1 </b></i>
<i><b>chiều</b></i>


<i><b>Nhập m¶ng 1 chiỊu</b></i>


<i><b>Xử lí mảng bằng </b></i>
<i><b>thuật tốn Tráo đổi</b></i>


<i><b>In kÕt qu¶</b></i>


<b>PROGRAM Sapxep;</b>
<b>Uses crt;</b>


<b>Type dayso = Array[1..250] of integer;</b>
<b>Var</b>


<b> i, j , n , tg : integer;</b>
<b> A : dayso;</b>


<b>BEGIN</b>



<b> Clrscr;</b>


<b> write(‘ Nhap vao so phan tu cua day so : ’);</b>
<b> readln(n);</b>


<b> For i := 1 to n do </b>
<b>Begin</b>


<b> write(‘ Phan tu thu ‘,i,’ = ‘);</b>
<b> readln(A[i]);</b>


<b>end; </b>


<b> For j := n downto 2 do</b>
<b> For i:= 1 to j-1 do</b>


<b> If A[i]>A[i+1] Then </b>
<b> begin</b>


<b>Tg := A[i];</b>
<b>A[i]:=A[i+1];</b>
<b>A[i+1]:=Tg;</b>
<b> end;</b>


<b> Writeln(‘ Day so duoc sap xep ’);</b>
<b> For i:=1 to n do Write(A[i]:5);</b>


<b> Readln;</b>



</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

Bµi 3. NhËp vµo mét d·y A gåm N (N  250) sè nguyªn d ơng khác nhau và
<i>một số k. Cho biÕt vÞ trÝ cđa số hạng có giá trị b»ng k trong d·y (nÕu có) ? </i>
Thông báo kết quả ra màn hình


* INPUT:

Nhập số nguyên d ơng n, dÃy n số nguyên d ơng a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub> và
số nguyên k


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

<b>Lần l ợt</b>

<b> từ số hạng thứ nhất, so sánh giá trị số hạng </b>


<b>đang xét với k cho đến khi gặp đ ợc số hạng bằng k, </b>


<b>hoặc d y đ đ ợc xét hết và khơng có số hạng nào cú </b>

ó

ó



<b>giá trị bằng k.</b>



<b>For i := 1 to n do</b>


<b>IF A[i] = k then</b>


<b>Begin</b>


<b> Tim_thay:=true;</b>
<b> cs:=i;</b>


<b> break;</b>
<b>end;</b>


<b>Tim_thay := false;</b>


<b>IF tim_thay then writeln(‘Chi so tim duoc: ’,i)</b>
<b> else writeln(‘Khong tim thay’);</b>



</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

<b> Cách 2: Tìm kiếm nhị phân</b>


<b>10</b>


<b>9</b>


<b>8</b>


<b>7</b>


<b>6</b>


<b>5</b>


<b>4</b>


<b>3</b>


<b>2</b>


<b>1</b>


<b>i</b>


<b>33</b>


<b>31</b>


<b>30</b>


<b>22</b>


<b>21</b>


<b>9</b>


<b>6</b>


<b>5</b>


<b>4</b>


<b>2</b>


<b>A</b>



<b> Víi k = 21 vµ d y A gåm 10 số hạng nh sau: </b>Ã


<b>L ợt thứ nhất: a<sub>giữa</sub> là a<sub>5</sub> = 9; 9 < 21 </b>


<b> vùng tìm kiếm thu hẹp trong phạm vi từ a<sub>6</sub></b><b> a<sub>10</sub>;</b>



<b>33</b>


<b>31</b>



<b>30</b>


<b>22</b>



<b>21</b>



<b>L ợt thứ hai: a<sub>giữa</sub> là a<sub>8</sub> = 30; 30 > 21</b>


<b> vùng tìm kiếm thu hẹp trong phạm vi từ a<sub>6</sub></b><b> a<sub>7</sub>;</b>


<b>L ợt thứ ba: a<sub>giữa</sub> là a<sub>6</sub> = 21; 21= 21 </b>


<b> Vậy chỉ số cần tìm là i = 6</b>

<b>.</b>


<b>22</b>


<b>21</b>



<b>6</b>



</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

<b>Dau:=1; Cuoi:=n; tim_thay:=false;</b>


<b>while ( Dau<= Cuoi) or NOT(tim_thay) do</b>


<b>Begin </b>


<b> Giua:= (Dau+Cuoi) div 2;</b>


<b> IF A[giua] = k then Tim_thay :=true</b>



<b> else </b>


<b> </b> <b>IF (A[Giua]>k) then Cuoi := Giua 1</b><i><b>–</b></i>


<b> else Dau := Giua +1;</b>
<b>end;</b>


<b>IF Tim_thay then Writeln(‘ Chi so tim duoc la : ’,Giua) </b>
<b> Else Writeln(‘Khong tim thay’);</b>


<b>V× d y A là d y tăng</b>Ã · <b>, ta thùc hiÖn thu hẹp nhanh phạm vi tìm kiếm </b>
<b>bằng cách so sánh k với A[giua] và xét các tr ờng hợp: </b>


<b>- A[giua]=k tìm thấy chỉ số giữa và kết thúc;</b>


<b>- A[giua]>k Thu hẹp về phía bên trái (Cuối = Giữa -1);</b>
<b>- A[giua]<k Thu hẹp về phía bên phải (Đầu = Giữa +1);</b>


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16></div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×