Бұл мақалада массивтерге қатысты мәселелер қарастырылады (және көбірек дәрежеде тәуелсіз талдау қарастырылады). Біз келесі бағыттар бойынша өз дағдыларымызды жетілдіреміз:
Бір өлшемді массивтерге қатысты есептер
Тізбекті жалғастырыңыз
Бұл тапсырмалар сериясында сізге қажет:- Осы немесе басқа сандық реттілік қалыптасатын заңдылықты анықтаңыз.
- Берілген тізбектің бірінші N элементін бүтін массив ретінде құрайтын және жиым элементтерін экранға шығаратын функцияны жазыңыз.
1, 2, 3, 4, 5…
1-қадам: Үлгіні анықтаңыз. Мұнда бәрі қарапайым - бұл натурал сандар қатары. 2-қадам: берілген жолдың бірінші N элементін массив ретінде құрайтын функцияны жазыңыз:
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;
}
}
Сол сияқты, келесі тізбектерді жалғастыратын функцияларды жазу керек:
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…
Элементтерді іздеу
Бұл тапсырмалар сериясында дайын массивтен кейбір қасиеттері бар элементті табу қажет. Мысалы, максималды мәні бар элемент. Көрсету үшін массив қабылдайтын және массивтің максималды элементінің индексін анықтайтын функцияның codeын жазайық, содан кейін бұл элементті оның индексімен бірге консольге шығарады. Мен сондай-ақ сыныпты пайдалана отырып,java.util.concurrent.ThreadLocalRandom
кездейсоқ элементтерден тұратын берілген ұзындықтағы бүтін массивті қалай жылдам жасауға болатынын көрсетемін:
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));
}
}
Енді тапсырмалардың өздері. Кездейсоқ бүтін элементтер массивінен мынаны табуымыз керек:
- Максималды.
- Ең аз.
- Орташа арифметикалық.
- Максималды және минималды элементтер арасындағы элементтер саны.
- Бірінші жай сан.
- Соңғы жай сан.
- Жиымдағы жай сандар саны.
Сұрыптау
Бұл есептер сериясында әртүрлі сұрыптау алгоритмдерін пайдаланып бүтін элементтер массивін сұрыптау керек. Интернетте әртүрлі алгоритмдер бойынша көптеген материалдар бар. Алдымен алгоритмнің мәнін түсінуге тырысыңыз, содан кейін оны өзіңіз жүзеге асыруға тырысыңыз. Алдымен қағазда (блок-схема, псевдоcode, сізге сәйкес келетін нәрсе), содан кейін IDEA-да. Іске асыру алгоритмдері:- көпіршікті сұрыптау;
- таңдау сұрыптауы;
- кірістіру сұрыптауы;
- біріктіру сұрыптау.
Екі өлшемді массивтерге қатысты есептер
Матрицаны сызыңыз
Келесі тапсырмалар сериясында белгілі бір жолмен құрастырылған екі өлшемді массивтерді (матрицаларды) сызу (консольге шығару) қажет: олар тапсырмада көрсетілген үлгіге сәйкес келуі керек. Бір мысал келтірейін. Бізге пішіннің матрицасынm*n
(мұндағы m
жолдар саны, ал n
жолдағы элементтер саны) құрастыру және көрсету керек:
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
Біз үшін бәрін жасайтын функцияны жазайық, сонымен қатар консольге матрицаны әдемі шығаратын функцияны берейік (сіз оны пайдалы деп санайсыз):
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();
}
}
}
m*n
Енді тапсырмалар: Пішіннің матрицасын көрсетіңіз : 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
Элементтерді іздеу
Бұл бөлімде матрицаның әртүрлі бөліктеріндегі әртүрлі элементтерді іздеуді жүзеге асыру қажет: белгілі бір бағанда немесе белгілі бір жолда. Бізде пішіннің матрицасы бар делік: -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
Мысал ретінде үшінші қатардағы теріс элементтердің санын табайық:
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();
}
}
}
Негізгі әдісті орындау нәтижесінде консольге келесілер шығарылады:
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
Енді тапсырмалар. Кез келген тақ үшін пішіннің n
матрицасын басып шығарыңыз :n*n
1, -2, 3,
-4, 5, -6,
7, -8, 9
Осы матрицадан мынаны шығарыңыз:
- барлық жағымсыз элементтер;
- жолдағы барлық теріс элементтер
i
; - бағандағы барлық теріс элементтер
j
; - барлық диагональды элементтер (жоғарғы сол жақ бұрыштан бастап);
- барлық диагональ элементтері (төменгі сол жақ бұрыштан бастап).
Теңіз соғысы
Жұлдызшасы бар соңғы бөлім: кеңестер немесе мысалдар жоқ. Матрицалар теңіз шайқасы ойынын бағдарламалау үшін өте қолайлы. Бұл ойынды бағдарламалау кезеңдерінің бірі кемелерді ойын алаңында орналастыру болып табылады. Егер сіз осы мәселелердің бірқатарын шешсеңіз, теңіздегі шайқастарды жеңе алатыныңызға сенімді болыңыз. Сонымен, нөлдерден тұратын 10х10 матрица берілген. Бұл теңіз шайқасы ойнайтын алаң деп есептейік. Бұл өрісте 0 - бос ұяшық, 1 - кеме немесе кеменің бөлігі. Функцияларды жазыңыз, олардың әрқайсысы теңіз шайқасы ойынының ережелеріне сәйкес оларды кездейсоқ орналастырады:- 10 бір палубалы кеме;
- 10 екі қабатты корбалдар;
- 5 үш қабатты кемелер;
- теңіз шайқасы ойынына барлық кемелерді реттейді (4 бір палубалы, 3 екі палубалы, 2 үш палубалы, 1 төрт палубалы).
GO TO FULL VERSION