Java - Viết chương trình xóa dòng có tổng lớn nhất của một ma trận số thực.
Viết chương trình nhập vào một ma trận số thực. Sau đó xóa dòng có tổng lớn nhất của ma trận đó.
Bài giải
-------------------- ######## --------------------
public static void main(String[] args) { int m, n; double tong = 0, max; int rowPosition = 0; // vị trí dòng Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào số dòng của ma trận: "); m = scanner.nextInt(); System.out.println("Nhập vào số cột của ma trận: "); n = scanner.nextInt(); double A[][] = new double[m][n]; System.out.println("Nhập các phần tử cho ma trận: "); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { System.out.print("A[" + i + "]["+ j + "] = "); A[i][j] = scanner.nextDouble(); } } System.out.println("Ma trận A vừa nhập:"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { System.out.print(A[i][j] + "\t"); } System.out.println("\n"); } // tìm tổng trên dòng đầu tiên (i = 0) của ma trận for (int j = 0; j < n; j++) { tong += A[0][j]; } max = tong; for (int i = 1; i < m; i++) { tong = 0; for (int j = 0; j < n; j++) { tong += A[i][j]; } // nếu giá trị của tổng các số ở các dòng sau // lớn hơn tổng các số ở dòng đầu tiên // thì gán max = tong if (tong > max) { max = tong; // lưu lại vị trí dòng có tổng lớn nhất rowPosition = i; } } for (int i = rowPosition; i < m; i++) { for (int j = 0; j < n; j++) { // đẩy phần tử ở dòng i + 1 lên // vị trí ở dòng i A[i][j] = A[i+1][j]; } m--; // giảm số dòng của ma trận đi 1 } System.out.println("Ma trận A sau khi xóa dòng có tổng lớn nhất:"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { System.out.print(A[i][j] + "\t"); } System.out.println("\n"); } }
Giải thích hoạt động của chương trình trên: Giả sử tôi nhập vào ma trận số thực có 3 dòng và 2 cột như sau:
3.0 1.0
1.0 8.0
2.0 0.0
Bài viết này được đăng tại [free tuts .net]
Bước 1: Tính tổng các phần tử ở dòng đầu tiên của ma trận (i = 0
) và gán vào biến tong, lúc này tong
sẽ bằng 4.0.
Bước 2: Gán giá trị biến max = tong = 4.0
.
Bước 3: Thiết lập giá trị biến tong = 0
và tính tổng của các phần tử ở dòng i = 1
trong ma trận, lúc này tong = 9.0
.
Bước 4: So sánh biến max
với biến tong
, vì max = 4.0 < tong = 9.0
nên sẽ thực hiện các lệnh bên trong if
: gán giá trị max = tong = 9.0
và lưu lại vị trí của dòng này rowPosition = 1
. Mục đích đoạn lệnh bên trong if là để tìm ra vị trí của dòng có tổng các phần tử là lớn nhất trong ma trận.
Bước 5: Tăng i
lên 1, lúc này i = 2
, thiết lập giá trị biến tong = 0
và thực hiện tính tổng của các phần tử ở dòng i = 2
trong ma trận. Đến đây chúng ta sẽ tính được giá trị tong = 3.0
.
Bước 6: So sánh biến max
với biến tong
, vì max = 9.0 > tong = 3.0
nên bỏ qua không thực hiện các lệnh bên trong if
.
Bước 7: Tăng i
lên 1, lúc này i = 3
không nhỏ hơn n
nên sẽ bỏ qua không thực hiện các lệnh trong thân vòng lặp for
.
Bước 8: Thực hiện vòng lặp for
với giá trị khởi tạo i = rowPosition = 1
và j = 0
(là dòng có tổng các phần tử lớn nhất). Sau đó, chúng ta sẽ tiến hành thay thế phần tử ở dòng i
bằng phần tử ở dòng i + 1
(tức là dòng kế tiếp). Kết quả sau khi thực hiện vòng lặp for
này là các phần tử ở dòng lớn nhất sẽ bị xóa và được thay thế bằng các phần tử ở dòng tiếp theo.
Bước 9: Hiển thị ma trận sau khi xóa dòng có tổng lớn nhất ra màn hình.
Kết quả sau khi biên dịch chương trình:
Câu hỏi thường gặp liên quan:
- Java - Tìm giá trị lớn nhất trong một ma trận 2 chiều với các phần tử được nhập từ bàn phím.
- Java - Viết chương trình tính tổng các phần tử nằm trên đường chéo chính của một ma trận vuông.
- Java - Tìm phần tử có giá trị lớn nhất và nhỏ nhất trên đường chéo chính của một ma trận vuông.
- Java - Thực hiện phép nhân hai ma trận và tìm ma trận chuyển vị của ma trận tích vừa tính được.
- Java - Thực hiện nhập vào một ma trận vuông và kiểm tra ma trận đó có phải là ma trận tam giác trên không?
- Java - Viết chương trình tính giá trị trung bình của các phần tử nhỏ nhất trên mỗi cột của một ma trận.
- Java - Viết chương trình tìm và in ra màn hình phần tử lớn nhất và vị trí của phần tử đó trong ma trận số nguyên
- Java - Viết chương trình tìm và in ra phần tử chẵn dương nhỏ nhất trong ma trận.
- Java - Viết chương trình xóa dòng có tổng lớn nhất của một ma trận số thực.