@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 страниц кода.

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

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

Войти через центр авторизации
Похожие вопросы