найти диагональ в двумерном массиве - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть двумерный массив с введенными пользователем значениями. Мне нужно найти сумму четных элементов в диагонали массива.

Я знаю, как объявить массив и заполнить его пользователем, но я не уверен, что даже элементы в главной диагонали действительно означают.

Я знаю, что могу узнать, является ли число четным, сказав:

if  n / 2 == 0 

Как только я сообщу сумму четных элементов на диагонали, я хотел бы заменить все 0 значений в массиве на единицы.

Ответы [ 7 ]

3 голосов
/ 07 декабря 2011

Диагональ означает все места, где x и y совпадают, Делайте, если ваш массив содержит:

1 3 8 53 3 9 74 4 5 75 1 7 4

Тогда диагональ выделена жирным шрифтом.

2 голосов
/ 07 декабря 2011

Предполагая, что массив представляет собой квадрат:

int sum = 0;

for(int i = 0; i < numOfArrayRows; i++)
{
    //Use the mod operator to find if the value is even.
    if(array[i][i] % 2 == 0)
        sum += array[i][i];

    //Change 0's to ones
    for(int j = 0; j < numOfArrayCols; j++)
        if(array[i][j] == 0)
            array[i][j] = 1;
}

Кроме того, в следующий раз добавьте тег "Домашнее задание", если у вас есть вопрос по домашнему заданию: P

0 голосов
/ 26 июля 2016

Вот код, который вам нужен, мало что объясните:

            //Read the size of the array, you can get it from .Count() if you wish
        int n = Convert.ToInt32(Console.ReadLine());
        int[][] a = new int[n][];
        //Reading all the values and preparing the array (a)
        for (int a_i = 0; a_i < n; a_i++)
        {
            string[] a_temp = Console.ReadLine().Split(' ');
            a[a_i] = Array.ConvertAll(a_temp, Int32.Parse);
        }
        //performing the operation (google what diagonal matrix means)
        int PrimarySum = 0, SecondarySum = 0;
        for (int i = 0; i < n; i++)
        {
            //The If condition is to skip the odd numbers
            if (a[i][i] % 2 == 0) { PrimarySum += a[i][i]; }
            //For the reverse order
            int lastelement = a[i].Count() - 1 - i;
            if (a[i][lastelement] % 2 == 0) { SecondarySum += a[i][lastelement]; }
        }
        //Get the absolute value
        Console.WriteLine(Math.Abs(PrimarySum - SecondarySum).ToString());
        Console.ReadKey();
0 голосов
/ 18 февраля 2015
int[,] array = new int[,] {{1,2,3},
                           {4,5,6},
                           {7,8,9}};
    //Suppose you want to find 2,5,8
    for(int row = 0; row < 3; row++)
    {
       for(int column = 0; column < 3; column++)
       {
          if((row == 0 && column == 1) || (row == 1 && column == 1) || (row == 2 && column == 1))
          {
             Console.WriteLine("Row: {0} Column: {1} Value: {2}",row + 1, column + 1, array[row, column]);
          }
       }
    }
0 голосов
/ 07 декабря 2011

И я подозреваю, что главной диагональю является та, которая начинается с координат 0,0.

Чтобы заменить 0 элементов на 1, вы должны сделать что-то вроде:

if (array [i, j] == 0) array [i, j] == 1;

0 голосов
/ 07 декабря 2011

С двумерным массивом это действительно легко, так как вам не нужно никакого волшебства индекса:

int a[N][N] = ...;
int sum = 0;
for(int i=0; i<N; ++i)
    if(a[i][i] % 2 == 0) //or a[i] & 1, if you like, just check if it's dividable by 2
        sum += a[i][i];

Этот код C ++ не должен быть таким же разным в C или C #, но вы должныточка.Точно так же второй вопрос будет таким простым:

int a[M][N] = ...;
for(i=0; i<M; ++i)
    for(j=0; j<N; ++j)
        if(a[i][j] == 0)
            a[i][j] = 1;
0 голосов
/ 07 декабря 2011

Это звучит как домашнее задание - однако я помогу:)

Так что, если у вас есть двумерный массив, и чтобы найти сумму диагональных значений, вы будете знать, что индексы обоихзначения будут совпадать, чтобы предоставить вам каждое из диагональных значений.

Чтобы выполнить итерацию по ним, вы можете использовать простой цикл, который суммирует каждое диагональное значение, как показано:

//Your Sum
int sum = 0;

//This will iterate and grab all of the diagonals
//You don't need to iterate through every element as you only need
//the diagonals.
for(int i = 0; i < sizeOfArray; i++)
{
   //This will add the value of the first, second, ... diagonal value to your sum
   sum += array[i,i];
}

Чтобы установить каждое из значений от 0 до 1, вы можете выполнить итерацию по каждому элементу массива и проверить, равно ли значение 0, а затем установить это значение в 1, например:

for(int i = 0; i < sizeOfArray; i++)
{
    for(int j = 0; j < sizeOfArray; j++)
    {
         //Check if this value is 0;

         //If it is 0, set it to 1, otherwise continue
    }
}
...