Tải bản đầy đủ (.pdf) (28 trang)

Bài tập lớn cấu trúc dữ liệu và giải thuật

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 (4.29 MB, 28 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>BỘ GIÁO DỤC VÀ ĐÀO TẠO</b>

<b>TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HCM</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Bài 1: Viếết phương th c mang.DoiXung( ) nh sau: - mang là m t ma tr n vuông, môỗi phầần t ứưộậửch a m t sôế nguyến. - Phứộng th c tr vếầ true nếếu mang là ma tr n đôếi x ng, ngươứảậứượ ạc l i tr vếầ ảfalse.</b>

Mã giả: Vòng lập i Vòng lập j

Nếu mang[i,j] != mang[j,i]

Chỉ cần 1 giá trị của mảng không đúng mảng không đối xứng Ngược lại là đối xứng

Kết quả:

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

Mảng là [ 3 2 3 1 2 3 4 3

2 3 1 2 3 2 3 4]

Kết quả là không đối xứng vậy kết quả thuật toán là đúng.

<b>Bài 2: Viếết phương th c mang.TamGiacTren( ) nh sau: - mang là m t ma tr n vuông, môỗi ứưộậphầần t ch a m t sôế nguyến. - Phửứộương th c tr vếầ true nếếu mang là ma tr n tam giác trến, ngứảậượcl i tr vếầ false.ạả</b>

Mã giả: Vòng lập i Vòng lập j

Nếui > j && mang[i,j] != 0

Chỉ cần 1 giá trị của mảng không đúng mảng không phải là ma trận tam giác trên

Ngược lại là là ma trận tam giác trên. Code:

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

Kết quả:

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>Bài 3: Viếết phương th c mang.TrungHang( ) nh sau: - mang là m t ma tr n vuông, môỗi phầần ứưộật ch a m t sôế nguyến. - Phửứộng th c tr vếầ true nếếu mang có ít nhầết hai hàng giơếng nhau, ươứả</b> Chạy vịng lập k để lập qua từng giá trị

Nếu mang[I,k] != mang[j , k]

Thì hàng đó khơng trùng và tiếp với j+1

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Kết quả:

Mảng = [2 3 2 3 1 2 1 2

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

2 3 2 3 4 4 3 4]

Ta thấy hàng 1 và hàng 3 trùng nhau nên đáp án là có ít nhất 2 hàng trùng nhau nên thuật toán đúng.

<b>Bài 4: Viếết phương th c mang.NhomHang( ) nh sau: - mang là m t ma tr n vuông, môỗi phầần ứưộật ch a m t sôế nguyến. - Phửứộương th c in ra nhóm ch m c hàng c a các hàng giơếng nhau, mơỗi ứỉụủnhóm đc bắết đầầu in đầầu hàng màn hình.ượở</b>

So sánh hàng này lần lượt với các hàng khác Nếu mang[i,k] != mang[j,k]

Thì khơng trùng hàng Ngược lại thì trùng hàng Code:

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Kết quả:

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Mảng [2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2]

Hàng 1 3 trùng nhau và hàng 2 4 trùng nhau nên kết quả đúng.

<b>Bài 5: Viếết phương th c a.Cong(b) nh sau: - a và b là các sôế nguyến không dầếu đứưược ch a ứtrong m ng m t chiếầu, môỗi phầần t ch a m t ký sôế. - Phảộửứộng th c tr vếầ m t sôế nguyến là kếết ươứảộqu c a a + b nếếu kếết qu không b tràn ho c tr vếầ m ng gôầm các sôế -1 nếếu kếết qu b tràn.ả ủảịặảảả ị</b>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>Bài 6: Viếết phương th c a.Tru(b) nh sau: ứư</b>

<b>- a và b là các sôế nguyến không dầếu đc ch a trong m ng m t chiếầu, môỗi phầần t ch a m t ký sôếượứảộửứộvà a ≥ b. </b>

<b>- Phng th c tr vếầ m t sôế nguyến là kếết qu c a a - b.ươứảộả ủ</b>

Mã giả:

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

Ngược lại là là ma trận tam giác dưới.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Kết quả không là ma trận tam giác dưới nên kết quả đúng.

<b>Bai 9: Viếết phương th c mang.TrungCot( ) nh sau: ứư- mang là m t ma tr n vuông, môỗi phầần t ch a m t sôế nguyến. ộậửứộ</b>

<b>- Phng th c tr vếầ true nếếu mang có ít nhầết hai c t giôếng nhau, ngươứảộượ ạc l i tr vếầ falseả</b>

So sánh cột này lần lượt với các cột khác Nếu mang[k,i] != mang[j,j]

Thì khơng trùng cột Ngược lại thì trùng cột

<b>Code:</b>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Kết quả:

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<b>Bài 10: Viếết phương th c mang.NhomCot( ) nh sau: - mang là m t ma tr n vuông, môỗi phầần ứưộật ch a m t sôế nguyến. - Phửứộương th c in ra nhóm ch m c c t c a các c t giơếng nhau, mơỗi nhóm ứỉụộủộđc bắết đầầu in đầầu hàng màn hình.ượở</b>

Mã giả:

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Đặt một biến Boolean để xét cột đó đã xét chưa

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Và kết quả đưa ra của thuật toán là đúng.

<b>Bài 11: Viếết phương th c a.Cong(b) nh sau: - a và b là các sôế nguyến (ầm, 0 ho c dứưặương) baogôầm hai phầần: phầần dầếu được ch a trong m t sôế nguyến (0 bi u diếỗn sôế dứộểương và 1 bi u diếỗn cho ểsôế ầm) và phầần sôế đc ch a trong m ng m t chiếầu (môỗi phầần t ch a m t ký sôế). - Phượứảộửứộương th cứtr vếầ m t sôế nguyến là kếết qu c a a + b nếếu kếết qu không b tràn ho c tr vếầ m ng gôầm các sơế -1ảộả ủảịặảả</b>

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

Thì trả về d = mang[1] nếu là 0 ngược lại là d = -mang[1] Tương tự với c đối với mảng 2

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Ta có 2 mảng a = [0 , 3] Mảng b = [ 0, 5 ]

Do số đầu của 2 mảng là 0 nên ta được kết quả là 3 +5 = 8 Kết quả này nhỏ hơn 10 nên in ra 8

Ngược lại nếu lớn hơn 10 thì:

Trả về mảng -1 -1

<b>Bài 12:</b> Viếết phương th c a.Tru(b) nh sau: - a và b là các sốế nguyến (âm, 0 ho c dứ ư ặ ươ ng) bao gốồm hai phâồn: phâồn dâếu đ c ch a trong m t sốế nguyến (0 bi u diếễn sốế dượ ứ ộ ể ương và 1 bi u diếễn cho sốếể âm) và phâồn sốế đ c ch a trong m ng m t chiếồu (mốễi phâồn t ch a m t ký sốế). - Phượ ứ ả ộ ử ứ ộ ươ ng th c tr ứ ả vếồ m t sốế nguyến là kếết qu c a a – b nếếu kếết qu khống b tràn ho c tr vếồ m ng gốồm các sốế -1 nếếu ộ ả ủ ả ị ặ ả ả kếết qu b tràn.ả ị

Mã giả:

Cộng hai mảng.

Nếu phần tử đầu của mảng là 0 hoặc 1 (mang[0] = 0 || 1) Thì trả về d = mang[1] nếu là 0 ngược lại là d = -mang[1] Tương tự với c đối với mảng 2

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

Kết quả:

Nếu a [0;3] b = [0; 3] kết quả là 0 đúng với thuật tốn. Nếu kết quả < 0 thì trả về mảng -1

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>Bài 13: Viếết phương th c a.Nhan(b) nh sau: - a và b là các sôế nguyến (ầm, 0 ho c dứưặương) bao gôầm hai phầần: phầần dầếu được ch a trong m t sôế nguyến (0 bi u diếỗn sôế dứộểương và 1 bi u diếỗnểcho sôế ầm) và phầần sôế đc ch a trong m ng m t chiếầu (môỗi phầần t ch a m t ký sôế). - Phượứảộửứộương th c tr vếầ m t sôế nguyến là kếết qu c a a × b nếếu kếết qu không b tràn ho c tr vếầ m ng gôầm cácứảộả ủảịặảảsôế -1 nếếu kếết qu b tràn.ả ị</b>

Mã giả:

Cộng hai mảng.

Nếu phần tử đầu của mảng là 0 hoặc 1 (mang[0] = 0 || 1) Thì trả về d = mang[1] nếu là 0 ngược lại là d = -mang[1] Tương tự với c đối với mảng 2

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

Kết quả

Hai mảng a= [0;2] và b = [0;3]

Do số đầu của cả 2 mảng bằng 0 nên kết quả bằng 2*3 =6 Kết quả này nhỏ hơn < 10 nên in ra 6

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

Ngược lại nếu lớn hơn 10:

Trả về mảng -1 -1

<b>Bài 14: Viếết phương th c a.DayConDauTien(b) nh sau: - a, b là hai m ng m t chiếầu, môỗi ứưảộphầần t ch a m t sôế nguyến. - Phửứộng th c tr vếầ m t m ng c ch a dãy con (bao gôầm các sôế liến ươứảộảứtếếp nhau trong m ng) c a lầần g p đầầu tến (đi t trái qua ph i) mà dãy con này đôầng th i có trongảủặừảờ</b>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Vì vậy kết quả trả về của thuật toán là đúng theo yêu cầu.

<b>Bài 15: Viếết phương th c a.DayConDaiNhat(b) nh sau: - a, b là hai m ng m t chiếầu, môỗi ứưảộphầần t ch a m t sôế nguyến. - Phửứộng th c tr vếầ m t m ng c ch a dãy con (bao gôầm các sôế liến ươứảộảứtếếp nhau trong m ng) c a lầần g p đầầu tến (đi t trái qua ph i) có chiếầu dài (sơế lảủặừảượng phầần t ) ửl n nhầết mà dãy con này đơầng th i có trong m ng a và m ng b. - Ví d : m ng a ch a các sôế 1, 6, 2, ớờảảụảứ</b>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<b>Bài 16: Viếết phương th c mang.Dao( ) nh sau: - mang là m t ma tr n vuông, môỗi phầần t ứưộậửch a m t sôế nguyến: sôế 0 bi u diếỗn ô nứộểc, sôế 1 bi u diếỗn ô đầết. Đ o là m t vùng bao gôầm các ô ướểảộđầết kếầ c nh (khơng kếầ góc). - Phạng th c in ra di n tch l n nhầết (sôế ô đầết) c a các đ o có d ng ươứệớủảạhình ch nh t (k c hình vng).ữậể ả</b>

Mã giả:

Cho 2 vòng lập i và j để chọc vào giá trị của mảng

Thuật toán sẽ chọc vào từng giá trị theo row và col nếu row = 1 và col = 1 thì

Thì giá trị k ++

Nếu ơ tiếp theo có row và col = 1 thì k++ Cho đến khi lọc qua hết mảng thì diện tích là k^2 Code:

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>Kết quả:</b>

Ứng với mảng:

</div>

×