JavaRush /وبلاگ جاوا /Random-FA /حل مسائل مربوط به آرایه های یک بعدی و دو بعدی
Анзор Кармов
مرحله
Санкт-Петербург

حل مسائل مربوط به آرایه های یک بعدی و دو بعدی

در گروه منتشر شد
این مقاله مشکلات مربوط به آرایه ها را بررسی می کند (و تا حد زیادی برای تجزیه و تحلیل مستقل ارائه می کند). ما مهارت های خود را در زمینه های زیر افزایش خواهیم داد:
  1. آرایه های تک بعدی

    1. مشکلات "ادامه دنباله" ;
    2. وظایف جستجوی عنصر؛
    3. مشکلات مربوط به مرتب سازی عناصر آرایه.
  2. آرایه های دو بعدی

    1. وظایف "ساخت ماتریس فرم" ;
    2. وظایف "یافتن عناصر در غیرمنتظره ترین مکان ها (ردیف ها، ستون ها، مورب ها)" .
    3. وظایف "کشتی ها را برای نبرد آبی ترتیب دهید . "
برای همه مشکلات از آرایه های اعداد صحیح استفاده خواهیم کرد. حل مسائل مربوط به آرایه های یک بعدی و دو بعدی - 1

مشکلات مربوط به آرایه های یک بعدی

دنباله رو ادامه بدید

در این سری از وظایف شما باید:
  1. الگویی را تعیین کنید که طبق آن این یا آن دنباله عددی تشکیل می شود.
  2. تابعی بنویسید که 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…

جستجو برای عناصر

در این سری از وظایف، لازم است عنصری را در آرایه تمام شده پیدا کنید که دارای برخی ویژگی ها باشد. به عنوان مثال، عنصر با حداکثر مقدار. برای نشان دادن، اجازه دهید برای تابعی کد بنویسیم که یک آرایه را می گیرد و شاخص حداکثر عنصر آرایه را تعیین می کند و سپس این عنصر را به همراه شاخص آن به کنسول خروجی می دهد. من همچنین نشان خواهم داد که چگونه با استفاده از کلاس، 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));
    }
}
حالا خود وظایف. از آرایه ای از عناصر اعداد صحیح تصادفی باید پیدا کنیم:
  1. بیشترین.
  2. کمترین.
  3. میانگین.
  4. تعداد عناصر بین حداکثر و حداقل عناصر.
  5. اولین عدد اول
  6. آخرین عدد اول
  7. تعداد اعداد اول در آرایه.
می توانید هم مقدار و هم شاخص ها را نمایش دهید. اگر هیچ عنصری وجود ندارد که به دنبال آن هستید، آن را بر روی صفحه نمایش به راحتی نشان دهید. برای آخرین کار، باید آرایه ای از عناصر عدد صحیح را که به ترتیب صعودی مرتب شده اند آماده کنید. در این آرایه، باید یک عنصر را بر اساس مقدار در حداقل تعداد عملیات ( Hint ) پیدا کنید.

مرتب سازی

در این سری از مسائل، شما باید آرایه ای از عناصر عدد صحیح را با استفاده از الگوریتم های مرتب سازی مختلف مرتب کنید. مطالب بسیار زیادی در اینترنت در مورد الگوریتم های مختلف وجود دارد. سعی کنید ابتدا ماهیت الگوریتم را درک کنید و سپس خودتان آن را پیاده سازی کنید. ابتدا روی کاغذ (بلوک دیاگرام، شبه کد، هر آنچه که برای شما مناسب است)، و سپس در 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تمام عناصر منفی در ستون
  • تمام عناصر مورب (از گوشه سمت چپ بالا شروع می شود)؛
  • تمام عناصر مورب (از گوشه سمت چپ پایین شروع می شود).

نبرد دریایی

بخش آخر با ستاره: بدون نکته یا مثال. ماتریس ها برای برنامه نویسی بازی نبرد دریایی ایده آل هستند. یکی از مراحل برنامه نویسی این بازی، قرار دادن کشتی ها در زمین بازی است. اگر تعدادی از این مشکلات را حل کردید، مطمئن باشید که قادر خواهید بود با نبردهای دریایی کنار بیایید. بنابراین، با توجه به یک ماتریس 10x10 متشکل از صفر. بیایید فرض کنیم که میدانی برای انجام نبرد دریایی است. در این قسمت، 0 یک سلول خالی، 1 یک کشتی یا بخشی از یک کشتی است. توابعی را بنویسید که هر کدام طبق قوانین بازی نبرد دریایی آنها را به صورت تصادفی قرار می دهد:
  • 10 کشتی تک طبقه؛
  • 10 کوربال دو طبقه؛
  • 5 کشتی سه طبقه؛
  • همه کشتی ها را برای بازی نبرد دریایی ترتیب می دهد (4 تک عرشه، 3 دو طبقه، 2 سه عرشه، 1 چهار عرشه).
همین! مانند هر موضوع برنامه نویسی، آرایه ها به بهترین شکل از طریق تمرین یاد می گیرند. گرم کردن مبارک!
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION