using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace l_n_4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Вbедите количество строк");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Вbедите количество столбцов");
int b = Convert.ToInt32(Console.ReadLine());
int[,] matr = new int[a,b];
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
Console.Write("matr[{0},{1}] = ", i, j);
matr[i,j] = Convert.ToInt32(Console.ReadLine()); // Ввод данных непосредственно в матрицу
}
}
Console.WriteLine("Ваш массив без обработки");
for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
Console.Write("{0} ", matr[i, j]);
Console.WriteLine();
}
System.Threading.Thread.Sleep(1000000);
}
}
}
Выбрать столбец из матрицы, и выбрать отрицательные числа
Есть матрица, нужно по очереди в каждом столбце выбрать непарные отрицательные числа, потом взять сумму их модулей и когда будет результат от каждого столбца, сортировать их в возрастающем порядке
Код:
int[] colchar = new int[b];
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
if ((matr[i,j] < 0) && (matr[i,j] % 2 != 0)) // negative and odd
colchar[j] += -matr[i,j];
}
}
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
if ((matr[i,j] < 0) && (matr[i,j] % 2 != 0)) // negative and odd
colchar[j] += -matr[i,j];
}
}
Более сложный момент - как восстановить порядок столбцов, соответствующий найденному порядку характеристик.
Можно поступить так: в паре с характеристикой будем хранить индекс исходного столбца.
Переписываем, используя вместо int[] colchar массив структур:
Код:
struct ValIndexPair
{
public int val; // characteristic
public int index; // column index
}
ValIndexPair[] colchari = new ValIndexPair[b];
for (int j = 0; j < b; j++)
colchari[j].index = j;
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
if ((matr[i,j] < 0) && (matr[i,j] % 2 != 0)) // negative and odd
colchari[j].val += -matr[i,j];
}
}
{
public int val; // characteristic
public int index; // column index
}
ValIndexPair[] colchari = new ValIndexPair[b];
for (int j = 0; j < b; j++)
colchari[j].index = j;
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
if ((matr[i,j] < 0) && (matr[i,j] % 2 != 0)) // negative and odd
colchari[j].val += -matr[i,j];
}
}
Матрицу печатаем в соответствии с тем, как легли индексы после сортировки:
Код:
Array.Sort(colchari, (c1, c2) => Math.Sign(c1.val - c2.val)); // sort by val
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
Console.Write("{0} ", matr[i, colchari[j].index]);
Console.WriteLine();
}
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
Console.Write("{0} ", matr[i, colchari[j].index]);
Console.WriteLine();
}
негативних непарних елементів. Переставляючи стовпці заданої матриці, розташувати їх
відповідно до зростання характеристик.
Это само задание, усомнился что я всё так как надо понял.
Реализовал ввод матрицы, и вывод её (первоначального вида, без обработки)
Что дальше делать, понимаю, но впал в ступор =(
Код:
Вот такой код вышел
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace l_n_4
{
struct ValIndexPair
{
public int val; // characteristic
public int index; // column index
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Вbедите количество строк");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Вbедите количество столбцов");
int b = Convert.ToInt32(Console.ReadLine());
int[,] matr = new int[a,b];
//int srov = 0;
int []sum = new int ;
for (int i = 0; i < b; i++)
{
sum = 0;
}
for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
Console.Write("matr[{0},{1}] = ", i, j);
matr[i, j] = Convert.ToInt32(Console.ReadLine()); // Ввод данных непосредственно в матрицу
}
}
Console.WriteLine("Ваш массив без обработки");
for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
Console.Write("{0} ", matr[i, j]);
Console.WriteLine();
}
for(int j = 0; j < b; j++)
{
for (int i = 0; i < a; i++)
{
if(i % 2 != 0 && matr[i,j] < 0 )
{
sum[j] += -matr[i,j];
}
}
}
for (int j = 0; j < b; j++ )
{
Console.Write("Stolb {0}", sum[j]);
Console.WriteLine();
}
System.Threading.Thread.Sleep(100000);
}
}
}