@IQI

Как упорядочить столбики матрицы за убыванием количеств нулей в этих столбиках?

Здравствуйте, заранее извиняюсь за этот вопрос. Нужно упорядочить столбики матрицы за убыванием количеств нулей в этих столбиках (то есть, слева столбики, где нулей больше, затем те где поменьше, и так до правого края, где те столбики, в которых нулей меньше).
using System;
using System.Collections.Generic;


namespace Arrays
{

    
    class Program
    {
        static void Print(int[,] arr)
        {
            for (int i = 0; i < arr.GetLength(0); i++, Console.WriteLine())
                for (int j = 0; j < arr.GetLength(1); j++)
                    Console.Write("{0,3}", arr[i, j]);
        }

        static int[,] Get_Manually(int rows, int coluns)
        {

            int[,] mas = new int[rows, coluns];

            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < coluns; j++)
                {
                    Console.Write("mas[" + i + "," + j + "]: ");
                    mas[i, j] = int.Parse(Console.ReadLine());
                }
            }
            Console.WriteLine();

            return mas;
        }
        static int[,] Choose(int answ, int a, int b)
        {

            int[,] matrix = new int[a, b];


            if (answ == 1)
            {
                matrix = GetRandom(a, b);
            }
            else if (answ == 2)
            {
                Console.WriteLine("Заполни матрицу");
                matrix = Get_Manually(a, b);
            }

            return matrix;


        }
        static int[,] GetRandom(int rows, int coluns)
        {
            int[,] result = new int[rows, coluns];
            Random rand = new Random();

            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < coluns; j++)
                {
                    result[i, j] = rand.Next(5);
                }
            }
            return result;
        }
                static void Sort(int[,] arr, List<int> indexOfRawsWithMinSum)
                {
                    int len = arr.GetLength(1);
                    for (int k = 0; k < indexOfRawsWithMinSum.Count; k++)
                    {
                        for (int i = 1; i < len; i++)
                        {
                            for (int j = 0; j < len - i; j++)
                            {
                                if (
                                    arr[indexOfRawsWithMinSum[k], j] <
                                    arr[indexOfRawsWithMinSum[k], j + 1]
                                )
                                {
                                    Swap(ref arr[indexOfRawsWithMinSum[k], j],
                                    ref arr[indexOfRawsWithMinSum[k], j + 1]);
                                }
                            }
                        }
                    }
                }
                static void Swap(ref int e1, ref int e2)
                {
                    int temp = e1;
                    e1 = e2;
                    e2 = temp;
                }
        static void FindNulls(int[,] arr)
        {

            for (int i = 0; i < arr.GetLength(0); i++)
            {

                for (int j = 0; j < arr.GetLength(1); j++)
                {
                    if (arr[i,j]==0)
                    {
                        Console.WriteLine("True");
                    }
                    
                }


            }

            
        }


        static void Main(string[] args)
        {
            Console.WriteLine("Введите размерность матрицы: ");
            Console.Write("Первое значение: ");
            int first_value = int.Parse(Console.ReadLine());
            Console.Write("Второе значение: ");
            int second_value = int.Parse(Console.ReadLine());


            Console.WriteLine("Как следует заполнить матрицу:" + "\nРандомно нажмите 1" + "\nВручную нажмите 2");
            int answ = int.Parse(Console.ReadLine());
            int[,] matrix = Choose(answ, first_value, second_value);
            Print(matrix);

            //Sort(matrix, first_value, second_value);




            


            Console.ReadKey();
        }


    }
}


Извиняюсь за большое количество мусора в коде(были разные мысли)
Заранее спасибо
  • Вопрос задан
  • 30 просмотров
Решения вопроса 1
@Dron_000
Berserk/BrainFackMan
LINQ to Objects
https://professorweb.ru/my/LINQ/base/level1/info_l...
Операции OrderBy и OrderByDescending
https://professorweb.ru/my/LINQ/base/level2/2_5.php

Это векторная обработка массивов по лямбда выражению.
Если не удастся выучить, то так и будет +100500 страниц кода.

Иначе напишите процедуру попарного обмена значениями элементов массива из двух разных строк...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы