38
Click to edit Master subtitle style MẢNG 2 CHIỀU (2D Array) Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học TP.HCM (HUFLIT) 1

MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

  • Upload
    vonhan

  • View
    233

  • Download
    6

Embed Size (px)

Citation preview

Page 1: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Click to edit Master subtitle style

MẢNG 2 CHIỀU (2D Array)

Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học TP.HCM (HUFLIT)

1

Page 2: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Khái niệm Khai báo Truy xuất dữ liệu kiểu mảng 2 chiều Nhập, xuất mảng 2 chiều Bài tập thực hành

NỘI DUNG

2

Page 3: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

KHÁI NIỆM MẢNG 2 CHIỀU

3

Page 4: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

C# hỗ trợ các kiểu mảng sau: Mảng 1 chiều (single-dimensional array) Mảng nhiều chiều (multi-dimensional array) Mảng răng cưa (jagged array)

Khái niệm

4

Page 5: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng khác. Mảng có từ 2 chiều trở lên được gọi chung là mảng nhiều chiều. Mảng nhiều chiều được dùng để lưu các dữ liệu dạng bảng, ma trận trong chương trình.

Khái niệm

5

Page 6: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Ma trận

Khái niệm

6

0

n-1

0 1 … m-1

An,m

0

n-1

An

0 … n-1

Ma trận vuông

Page 7: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Ma trận vuông

Khái niệm

7

0

n-1

An

0 … n-1

0

n-1

0 … n-1

0

n-1

0 … n-1

dòng = cột dòng > cột dòng < cột

0

n-1

An

0 … n-1

0

n-1

0 … n-1

0

n-1

0 … n-1

dòng + cột = n-1 dòng + cột > n-1 dòng + cột < n-1

Page 8: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

KHAI BÁO MẢNG 2 CHIỀU

8

Page 9: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Kiểu mảng nhiều chiều: <kiểu cơ sở>[,] <tên mảng>;

Kiểu mảng răng cưa:

<kiểu cơ sở>[][] <tên mảng>;

Khai báo (System.Array)

9

int[,] a; // mảng 2 chiều

int[][] a; // mảng răng cưa 2 chiều

Page 10: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

<kiểu cơ sở>[,] <tên mảng>;

<kiểu cơ sở>[][] <tên mảng>;

Khai báo (System.Array)

10

int[,] b; b = new int[3,5];

Mỗi dòng có thể có số lượng phần tử khác nhau không?

Ví dụ: Khai báo mảng 2 chiều a có 3 dòng, 5 cột

int[][] a; a = new int[3][]; a[0] = new int[5]; a[1] = new int[5]; a[2] = new int[5];

Page 11: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Khai báo (System.Array)

11

int[][] a; a = new int[5][]; a[0] = new int[6]; a[1] = new int[5]; a[2] = new int[2]; a[3] = new int[3]; a[4] = new int[7];

Page 12: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Khởi tạo giá trị:

Khai báo (System.Array)

12

int[][] a = new int[3][] { new int[5]{1,5,9,7,5}, new int[5]{2,7,3,8,4}, new int[5]{8,4,3,7,5}};

int[,] b = new int[3,5]{ {1,5,9,2,3}, {2,7,3,6,4}, {8,4,3,7,9}};

1 5 9 7 5

2 7 3 8 4

8 4 3 7 5

Page 13: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

TRUY XUẤT DỮ LIỆU KIỂU MẢNG 2 CHIỀU

13

Page 14: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Thông qua chỉ số (index) tương tự như mảng 1 chiều:

Kiểu mảng nhiều chiều: a[2,3]; Kiểu mảng răng cưa: a[2][3];

Lưu ý: Index phải là số nguyên dương. Index phải nằm trong phạm vi kích thước mảng đã được khai báo, nếu không .NET sẽ báo lỗi IndexOutOfRangeException

Truy xuất phần tử

14

Page 15: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

NHẬP, XUẤT MẢNG 2 CHIỀU

15

Page 16: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Yêu cầu: Nhập vào từ bàn phím một mảng a gồm n dòng m cột. Ý tưởng:

Nhập số dòng n và số cột m của mảng. Khởi tạo mảng có n dòng và m cột. Nhập từng phần tử của mảng: từ a[0][0] đến a[n-1][m-1]

Nhập mảng 2 chiều

16

Page 17: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Kiểu mảng răng cưa

Nhập mảng 2 chiều

17

public static void NhapMang(out int[][] a){ int rows, cols; Console.Write("Nhap so dong n = "); rows = Convert.ToInt32(Console.ReadLine()); Console.Write("Nhap so cot m = "); cols = Convert.ToInt32(Console.ReadLine()); a = new int[rows][]; for(int i=0; i<rows; i++){ a[i] = new int[cols]; for(int j=0; j<cols; j++){ Console.Write("a[{0}][{1}] = ", i, j); a[i][j] = Convert.ToInt32(Console.ReadLine()); } } }

Page 18: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Kiểu mảng nhiều chiều

Nhập mảng 2 chiều

18

public static void NhapMang(out int[,] a){ int rows, cols; Console.Write("Nhap so dong cua mang = "); rows = Convert.ToInt32(Console.ReadLine()); Console.Write("Nhap so cot cua mang = "); cols = Convert.ToInt32(Console.ReadLine()); a = new int[rows,cols]; for (int i = 0; i < a.GetLength(0); i++){ for (int j = 0; j < a.GetLength(1); j++){ Console.Write("a[{0},{1}] = ", i, j); a[i,j] = Convert.ToInt32(Console.ReadLine()); } } }

Page 19: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Yêu cầu: In ra màn hình mảng a gồm n dòng m cột. Ý tưởng:

Duyệt mảng từ dòng 0 đến dòng n-1; Tại mỗi dòng, in giá trị của phần tử a[i][j] (j: 0 → m-1), mỗi phần tử cách nhau bởi dấu khoảng trắng. Kết thúc mỗi dòng chèm thêm ký tự xuống dòng “\n”.

Xuất mảng 2 chiều

19

Page 20: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Kiểu mảng răng cưa

Xuất mảng 2 chiều

20

public static void XuatMang(int[][] a){ for (int i = 0; i < a.Length; i++){ for (int j = 0; j < a[i].Length; j++){ Console.Write(a[i][j] + " "); } Console.WriteLine(); } } static void Main(string[] args){ int[][] a; NhapMang(out a); XuatMang(a); }

Page 21: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Kiểu mảng nhiều chiều

Xuất mảng 2 chiều

21

public static void XuatMang(int[,] a){ for (int i = 0; i < a.GetLength(0); i++){ for (int j = 0; j < a.GetLength(1); j++){ Console.Write(a[i,j] + " "); } Console.WriteLine(); } } static void Main(string[] args){ int[,] a; NhapMang(out a); XuatMang(a); }

Page 22: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

BÀI TẬP THỰC HÀNH

22

Page 23: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 1: Viết hàm đọc mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚] từ file Input.txt. Lập ma trận B là ma trận chuyển vị của A (𝐵𝐵[𝑖𝑖, 𝑗𝑗] = 𝐴𝐴[𝑗𝑗, 𝑖𝑖]), ghi ma trận B vào file Output.txt.

Input: - Dòng 1 chứa 2 số nguyên dương n,m; - n dòng tiếp theo, mỗi dòng chứa m số nguyên là giá trị các phần tử trong ma trận A.

Output: - Ma trận B là ma trận chuyển vị của ma trận A.

Bài tập thực hành

Page 24: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 2: Viết hàm tìm chỉ số phần tử có giá trị lớn nhất trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚]. Xuất chỉ số và giá trị của phần tử lớn nhất ra màn hình.

Bài tập thực hành

Page 25: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 3: Viết hàm tìm phần tử lớn (nhỏ) nhất trong dòng thứ k (0 ≤ 𝑘𝑘 < 𝑛𝑛) của mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài 4: Viết hàm tìm phần tử lớn (nhỏ) nhất trong cột thứ k 0 ≤ 𝑘𝑘 < 𝑚𝑚 của mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài tập thực hành

Page 26: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 5: Viết hàm thêm một hàng tại vị trí thứ k (0 ≤ 𝑘𝑘 ≤ 𝑛𝑛) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài 6: Viết hàm thêm một cột tại vị trí thứ k (0 ≤ 𝑘𝑘 ≤ 𝑚𝑚) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài tập thực hành

Page 27: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 7: Viết hàm xóa một hàng tại vị trí thứ k (0 ≤ 𝑘𝑘 < 𝑛𝑛) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài 8: Viết hàm xóa một cột tại vị trí thứ k (0 ≤ 𝑘𝑘 < 𝑚𝑚) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài tập thực hành

Page 28: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 9: Viết hàm hoán vị 2 hàng thứ k và l (0 ≤ 𝑘𝑘, 𝑙𝑙 < 𝑛𝑛) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài 10: Viết hàm hoán vị 2 cột thứ k và l (0 ≤ 𝑘𝑘, 𝑙𝑙 < 𝑚𝑚) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài tập thực hành

Page 29: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 11: Viết hàm tính tổng các phần tử của hàng thứ k (0 ≤ 𝑘𝑘 < 𝑛𝑛) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài 12: Viết hàm tính tổng các phần tử của cột thứ k (0 ≤ 𝑘𝑘 < 𝑚𝑚) trong mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚].

Bài tập thực hành

Page 30: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 13: Viết hàm sắp xếp mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚] sao cho tổng của các dòng tăng dần từ trên xuống dưới.

Bài 14: Viết hàm sắp xếp mảng 2 chiều 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚] sao cho tổng của các cột tăng dần từ trái sang phải.

Bài tập thực hành

Page 31: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 15: Viết chương trình nhân 2 ma trận 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑚𝑚] và 𝐵𝐵[𝑚𝑚 𝑥𝑥 𝑝𝑝]. Biết rằng:

𝐴𝐴 𝑛𝑛 𝑥𝑥 𝑚𝑚 ∗ 𝐵𝐵 𝑚𝑚 𝑥𝑥 𝑝𝑝 = 𝐶𝐶[𝑛𝑛 𝑥𝑥 𝑝𝑝]

và 𝐶𝐶𝑖𝑖𝑖𝑖 = ∑ 𝐴𝐴𝑖𝑖𝑖𝑖 .𝐵𝐵𝑖𝑖𝑖𝑖𝑚𝑚

𝑖𝑖=1

Bài tập thực hành

Page 32: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 16: Cho ma trận vuông 𝐴𝐴 𝑛𝑛 𝑥𝑥 𝑛𝑛 . Viết các hàm sau: a) Tính tổng các phần tử nằm trên đường chéo chính. b) Tính tổng các phần tử nằm trên đường chéo phụ. c) Tính tổng các phần tử nằm phía trên đường chéo

chính. d) Tính tổng các phần tử nằm phía trên đường chéo

phụ.

Bài tập thực hành

Page 33: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 17: Cho hai số m và n. Hãy tạo một ma trận xoáy ốc từ ngoài vào trong theo chiều kim đồng hồ với kích thước của ma trận là 𝑚𝑚 𝑥𝑥 𝑛𝑛 (1 ≤ 𝑚𝑚,𝑛𝑛 ≤ 100). Ví dụ: 𝑚𝑚 = 𝑛𝑛 = 4 thì ta có ma trận xoáy ốc như sau:

Bài tập thực hành

Page 34: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Input: Chứa hai số nguyên dương m và n Output: Đưa ra các dòng của ma trận xoáy ốc Ví dụ:

Bài tập thực hành

Input.txt Output.txt

3 4 1 2 3 4

10 11 12 5

9 8 7 6

Page 35: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 18: Bảng kết quả của một giải vô địch bóng đá được cho bởi ma trận 𝐴𝐴[𝑛𝑛 𝑥𝑥 𝑛𝑛] (có n đội tham gia và mỗi đội phải đá vòng tròn 1 lượt, tức là mỗi đội phải đá n – 1 trận). Trong đó:

+ Tất cả các phần tử thuộc đường chéo chính bằng 0 + 𝐴𝐴[𝑖𝑖][𝑗𝑗] = 3 nếu đội i thắng đội j, và đội i có 3 điểm. + 𝐴𝐴[𝑖𝑖][𝑗𝑗] = 1 nếu đội i hòa với đội j, và đội i có 1 điểm. + 𝐴𝐴[𝑖𝑖][𝑗𝑗] = 0 nếu đội i thua đội j, và đội i có 0 điểm.

Hãy thực hiện các công việc sau: a) In ra màn hình tất cả các đội có số điểm lớn nhất. b) In ra màn hình tất cả các đội có số trận thắng nhiều hơn

thua? c) Hãy chỉ ra các đội không thua trận nào?

Bài tập thực hành

Page 36: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Input: - Dòng 1 chứa số nguyên dương n (n <= 50); - n dòng tiếp theo, mỗi dòng chứa n số nguyên là số điểm cả mỗi đội. Output - Dòng 1 là kết quả câu a - Dòng 2 là kết quả câu b - Dòng 2 là kết quả câu c Ví dụ:

Bài tập thực hành

Input.txt Output.txt

4 0 0 0 1 3 0 3 1 3 0 0 1 1 1 1 0

2 2 2 4

Page 37: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Bài 19: Tại một ngôi làng nọ, người ta cần đặt trạm cứu thương tại một hộ dân nào đó sao cho khoảng cách từ trạm đến hộ dân xa trạm nhất là nhỏ nhất. Hãy tìm vị trí đặt trạm cứu thương trong n hộ dân của ngôi làng đó. Biết rằng vị trí của mỗi hộ dân được xác định bằng cặp tọa độ nguyên (x , y).

Bài tập thực hành

Page 38: MẢNG 2 CHIỀU (2D Array)anhtt/Slidesss/KTLT182/Chap4.pdf · 2018-03-29 · Mảng 2 chiều thực chất là mảng 1 chiều mà mỗi phần tử của nó là một mảng

Input: - Dòng 1 chứa số nguyên dương n (n <= 50); - n dòng tiếp theo, mỗi dòng chứa cặp số nguyên (x , y) là tọa độ của hộ dân. Output - Dòng 1: Khoảng cách từ trạm cứu thương đến hộ dân xa nhất (làm tròn đến 2 chữ số thập phân). - Dòng 2: Cặp số nguyên (x , y) là tọa độ trạm cứu thương. Ví dụ:

Bài tập thực hành

Input.txt Output.txt

5 1 5 2 3 6 8 9 12 7 3

6.4 (6 , 8)