JavaRush /جاوا بلاگ /Random-UR /ایک جہتی اور دو جہتی صفوں پر مشتمل مسائل کو حل کرنا
Анзор Кармов
سطح
Санкт-Петербург

ایک جہتی اور دو جہتی صفوں پر مشتمل مسائل کو حل کرنا

گروپ میں شائع ہوا۔
یہ مضمون صفوں میں شامل مسائل پر غور کرے گا (اور، زیادہ حد تک، آزاد تجزیہ فراہم کرے گا)۔ ہم درج ذیل شعبوں میں اپنی صلاحیتوں کو بہتر بنائیں گے۔
  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. صف میں پرائم نمبرز کی تعداد۔
آپ قدر اور اشاریہ دونوں ڈسپلے کر سکتے ہیں۔ اگر کوئی ایسا عنصر نہیں ہے جس کی آپ تلاش کر رہے ہیں، تو اسے اپنی سہولت کے مطابق اسکرین پر دکھائیں۔ آخری کام کے لیے، آپ کو صعودی ترتیب میں ترتیب شدہ عددی عناصر کی ایک صف تیار کرنے کی ضرورت ہے۔ اس صف میں، آپ کو کم از کم آپریشنز ( اشارہ ) میں قدر کے لحاظ سے ایک عنصر تلاش کرنے کی ضرورت ہے۔

چھانٹنا

مسائل کے اس سلسلے میں، آپ کو مختلف ترتیب دینے والے الگورتھم کا استعمال کرتے ہوئے عددی عناصر کی ایک صف کو ترتیب دینے کی ضرورت ہے۔ انٹرنیٹ پر مختلف الگورتھم پر کافی مواد موجود ہیں۔ پہلے الگورتھم کے جوہر کو سمجھنے کی کوشش کریں، اور پھر خود اسے نافذ کرنے کی کوشش کریں۔ پہلے کاغذ پر (بلاک ڈایاگرام، سیڈوکوڈ، جو بھی آپ کے لیے مناسب ہو)، اور پھر 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