Bài viết này sẽ xem xét (và ở mức độ lớn hơn, cung cấp cho các phân tích độc lập) các vấn đề liên quan đến mảng. Chúng tôi sẽ cải thiện kỹ năng của mình trong các lĩnh vực sau:
Các bài toán liên quan đến mảng một chiều
Tiếp tục trình tự
Trong loạt nhiệm vụ này, bạn sẽ cần phải:- Xác định mô hình theo đó chuỗi số này hoặc chuỗi số đó được hình thành.
- Viết hàm tạo N phần tử đầu tiên của một dãy cho trước dưới dạng một mảng số nguyên và hiển thị các phần tử mảng đó ra màn hình.
1, 2, 3, 4, 5…
Bước 1: Xác định mẫu. Mọi thứ ở đây đều cơ bản - đó là một chuỗi số tự nhiên. Bước 2: viết hàm sắp xếp N phần tử đầu tiên của một hàng nhất định dưới dạng mảng:
public class Main {
public static void main(String[] args) {
System.out.println(Arrays.toString(createArrayOfIntegers(10)));
// Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
public static int[] createArrayOfIntegers(int n) {
int[] array = new int[n];
for (int i = 1; i <= n; i++) {
array[i-1] = i;
}
return array;
}
}
Tương tự, cần phải viết các hàm tiếp tục các chuỗi sau:
A. 2, 4, 6, 8, 10...
B. 1, 3, 5, 7, 9...
C. 1, 4, 9, 16, 25...
D. 1, 8, 27, 64, 125...
E. 1, -1, 1, -1, 1, -1...
F. 1, -2, 3, -4, 5, -6...
G. 1, -4, 9, -16, 25....
H. 1, 0, 2, 0, 3, 0, 4....
I. 1, 2, 6, 24, 120, 720...
J. 1, 1, 2, 3, 5, 8, 13, 21…
Tìm kiếm phần tử
Trong chuỗi nhiệm vụ này, cần phải tìm một phần tử trong mảng đã hoàn thiện có một số thuộc tính. Ví dụ: phần tử có giá trị lớn nhất. Để minh họa, hãy viết mã cho một hàm nhận vào một mảng và xác định chỉ mục của phần tử lớn nhất trong mảng, sau đó xuất phần tử này cùng với chỉ mục của nó ra bảng điều khiển. Tôi cũng sẽ trình bày cách sử dụng lớp này đểjava.util.concurrent.ThreadLocalRandom
bạn có thể nhanh chóng tạo ra một mảng số nguyên có độ dài nhất định, bao gồm các phần tử ngẫu nhiên:
public class Main {
public static void main(String[] args) {
int[] array = generateRandomIntArray(10);
findMax(array);
/*
Output:
Generated random array: [50551934, -551646189, 410352642, 1822778873, -1744293692, -1140287711, 878876868, -2116893120, -797503442, -703924530]
Max element is [1822778873] with index [3]
*/
}
public static int[] generateRandomIntArray(int n) {
int[] array = ThreadLocalRandom.current().ints().limit(n).toArray();
System.out.println("Generated random array: " + Arrays.toString(array));
return array;
}
public static void findMax(int[] array) {
int maxIndex = 0;
int max = array[maxIndex];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
maxIndex = i;
}
}
System.out.println(String.format("Max element is [%d] with index [%d]", max, maxIndex));
}
}
Bây giờ là nhiệm vụ của chính họ. Từ một mảng các phần tử nguyên ngẫu nhiên, chúng ta cần tìm:
- Tối đa.
- Tối thiểu.
- Trung bình.
- Số phần tử giữa phần tử lớn nhất và nhỏ nhất.
- Số nguyên tố đầu tiên.
- Số nguyên tố cuối cùng.
- Số số nguyên tố trong mảng.
Sắp xếp
Trong loạt bài tập này, bạn cần sắp xếp một mảng các phần tử số nguyên bằng nhiều thuật toán sắp xếp khác nhau. Có khá nhiều tài liệu trên Internet về các thuật toán khác nhau. Trước tiên, hãy cố gắng hiểu bản chất của thuật toán, sau đó thử tự mình thực hiện nó. Đầu tiên là trên giấy (sơ đồ khối, mã giả, bất cứ thứ gì phù hợp với bạn), sau đó là trong IDEA. Các thuật toán để thực hiện:- sắp xếp bong bóng;
- sắp xếp lựa chọn;
- sắp xếp chèn;
- sắp xếp hợp nhất.
Các vấn đề liên quan đến mảng hai chiều
Vẽ một ma trận
Trong chuỗi nhiệm vụ tiếp theo, cần vẽ (xuất ra bảng điều khiển) các mảng (ma trận) hai chiều được cấu tạo theo một cách nhất định: chúng phải tương ứng với mẫu được chỉ định bởi nhiệm vụ. Tôi sẽ cho bạn một ví dụ. Chúng ta cần xây dựng và hiển thị một ma trậnm*n
(trong đó m
là số hàng và n
số phần tử trong hàng) của biểu mẫu:
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Hãy viết một hàm sẽ làm mọi thứ cho chúng ta, đồng thời đưa ra một hàm sẽ xuất ma trận một cách đẹp mắt ra bảng điều khiển (bạn có thể thấy nó hữu ích):
public class Main {
public static void main(String[] args) {
createAndDrawMatrix(3, 4);
}
public static void createAndDrawMatrix(int m, int n) {
int[][] matrix = new int[m][n];
int value = 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = value;
value ++;
}
}
printMatrix(matrix);
}
public static void printMatrix(int[][] matrix) {
for (int[] array : matrix) {
for (int anInt : array) {
System.out.print(String.format("%3d", anInt));
}
System.out.println();
}
}
}
Nhiệm vụ bây giờ: Hiển thị ma trận m*n
có dạng: 4, 3, 2, 1 8, 7, 6, 5, 12,11,10, 9 ----------- 1, 4, 7 2, 5, 8 3, 6, 9 ----------- 9, 8, 7 6, 5, 4 3, 2, 1 ----------- 12,11,10, 9 8, 7, 6, 5, 4, 3, 2, 1
Tìm kiếm phần tử
Trong phần này, cần thực hiện tìm kiếm các phần tử khác nhau trong các phần khác nhau của ma trận: trong một cột cụ thể hoặc trong một hàng cụ thể. Giả sử chúng ta có một ma trận có dạng: -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18 -19 20 -21 22 -23 24 -25 26 -27 28 -29 30 -31 32 -33 34 -35
Ví dụ: hãy tìm số phần tử âm ở hàng thứ ba:
public class Main {
public static void main(String[] args) {
int [][] matrix = {
{ -1, 2, -3, 4, -5, 6, -7},
{ 8, -9, 10, -11, 12, -13, 14},
{-15, 16, -17, 18, -19, 20, -21},
{ 22, -23, 24, -25, 26, -27, 28},
{-29, 30, -31, 32, -33, 34, -35}
};
findNegativeCountInRow(matrix, 3);
}
private static void findNegativeCountInRow(int[][] matrix, int rowNumber) {
int negativeCount = 0;
for (int element : matrix[rowNumber]){
if (element < 0) {
negativeCount ++;
}
}
System.out.println("Matrix: ");
printMatrix(matrix);
System.out.println(String.format("Has %d negative elements in #%d row ", negativeCount, rowNumber));
}
public static void printMatrix(int[][] matrix) {
for (int[] array : matrix) {
for (int anInt : array) {
System.out.print(String.format("%5d", anInt));
}
System.out.println();
}
}
}
Kết quả của việc thực thi phương thức chính, kết quả sau sẽ được xuất ra bàn điều khiển:
Matrix:
-1 2 -3 4 -5 6 -7
8 -9 10 -11 12 -13 14
-15 16 -17 18 -19 20 -21
22 -23 24 -25 26 -27 28
-29 30 -31 32 -33 34 -35
Has 3 negative elements in #3 row
Bây giờ là nhiệm vụ. Đối với bất kỳ số lẻ nào, n
hãy in một ma trận n*n
có dạng:
1, -2, 3,
-4, 5, -6,
7, -8, 9
Từ ma trận này, suy ra:
- tất cả các yếu tố tiêu cực;
- tất cả các phần tử âm trong chuỗi
i
; - tất cả các phần tử âm trong cột
j
; - tất cả các phần tử đường chéo (bắt đầu từ góc trên bên trái);
- tất cả các phần tử đường chéo (bắt đầu từ góc dưới bên trái).
Trận đánh trên biển
Phần cuối cùng có dấu hoa thị: không có mẹo hoặc ví dụ. Ma trận là lý tưởng để lập trình trò chơi trận chiến trên biển. Một trong những giai đoạn lập trình của trò chơi này là việc sắp xếp các con tàu trên sân chơi. Nếu bạn giải quyết được một số vấn đề này, hãy yên tâm rằng bạn sẽ có thể đương đầu với trận hải chiến. Vì vậy, cho một ma trận 10x10 bao gồm các số 0. Giả sử đó là một sân chơi hải chiến. Trong trường này, 0 là ô trống, 1 là con tàu hoặc một phần của con tàu. Viết các hàm, mỗi hàm theo quy tắc của trò chơi chiến đấu trên biển, đặt chúng một cách ngẫu nhiên:- 10 tàu một tầng;
- 10 con san hô hai tầng;
- 5 tàu ba tầng;
- bố trí đầy đủ các loại tàu phục vụ trò chơi hải chiến (4 boong đơn, 3 boong đôi, 2 tàu ba boong, 1 tàu bốn boong).
GO TO FULL VERSION