我在矩阵中找到了最大的数字,但找不到最小的数字
我将最大的矩阵[i,j]值添加到maximax数组。 但是我无法将最小值添加到Minimax数组中。
/* Maximax degerini bulmak */
for (int i = 0; i < olay; i++)
{
for (int j = 0; j < state; j++)
{
if (maximax[i] < matris[i, j])
{
maximax[i] = matris[i, j];
}
}
}
/* Olaylar icin en yuksek State degerleri */
Console.WriteLine();
for (int i = 0; i < maximax.Length; i++)
{
Console.WriteLine(i+1+". Olay için en yüksek State degeri: "+maximax[i]);
}
/* En yuksek State degerini secmek */
ebState = maximax[0];
for (int i = 0; i < maximax.Length; i++)
{
if (maximax[i] > ebState)
{
ebState = maximax[i];
ebStateSiraSayisi = i;
}
}
Console.WriteLine();
/* Sonucu yazdırmak */
Console.WriteLine("Maximax kuralina göre " + ebState + " degeri secilir. ");
/* /Maximax degerini bulmak */
答案 0 :(得分:0)
Console.Write("Probleminizdeki Olay sayisini giriniz:");
int olay = Convert.ToInt32(Console.ReadLine());
Console.Write("Probleminizdeki State sayisini giriniz:");
int state = Convert.ToInt32(Console.ReadLine());
/* Degiskenler */
double[,] matris = new double[olay, state];
double[] maximax = new double[olay];
double[] minimax = new double[olay];
double ebState;
int ebStateSiraSayisi;
/* /Degiskenler */
/* Olay - State Tablosu Taslak Görünümü */
Console.WriteLine();
Console.WriteLine("Olay - State Tablosu Taslak Görünümü");
for (int i=0; i<olay; i++)
{
Console.Write(i+1+". Olay: ");
for (int j=0; j<state; j++)
{
Console.Write(j+1+". State Değeri -- ");
}
Console.WriteLine();
}
/* /Olay - State Tablosu Taslak Görünümü */
/* Olaylar için State değerleri girişi */
for (int i =0; i<olay; i++)
{
for (int j=0;j<state;j++)
{
Console.Write(i + 1 +". Olayın "+ (j+1) +". State değerini giriniz: ");
matris[i, j] = Convert.ToDouble(Console.ReadLine());
}
}
/* /Olaylar için State değerleri girişi */
/* Olaylar için State değerleri girişini ekrana yazdırmak */
Console.WriteLine();
for (int i = 0; i < olay; i++)
{
Console.Write(i + 1 + ". Olay: ");
for (int j = 0; j < state; j++)
{
Console.Write(j+1+". State Değeri: "+matris[i,j]+" --- ");
}
Console.WriteLine();
}
/* /Olaylar için State değerleri girişini ekrana yazdırmak */
/* Maximax degerini bulmak */
for (int i = 0; i < olay; i++)
{
for (int j = 0; j < state; j++)
{
if (maximax[i] < matris[i, j])
{
maximax[i] = matris[i, j];
}
}
}
/* Olaylar icin en yuksek State degerleri */
Console.WriteLine();
for (int i = 0; i < maximax.Length; i++)
{
Console.WriteLine(i+1+". Olay için en yüksek State degeri: "+maximax[i]);
}
/* En yuksek State degerini secmek */
ebState = maximax[0];
for (int i = 0; i < maximax.Length; i++)
{
if (maximax[i] > ebState)
{
ebState = maximax[i];
ebStateSiraSayisi = i;
}
}
Console.WriteLine();
/* Sonucu yazdırmak */
Console.WriteLine("Maximax kuralina göre " + ebState + " degeri secilir. ");
/* /Maximax degerini bulmak */
Console.ReadLine();
答案 1 :(得分:0)
一种方法是使用Buffer.BlockCopy()
将2D数组快速转换为1D数组,然后使用常规double[]
进行搜索。
/// <summary>
/// Find the maximum absolute value in an array
/// </summary>
/// <param name="array">The array</param>
public static double MaxAbs(this double[,] array)
{
var packed = array.ToPackedArray();
return packed[MaxAbsIndex(packed)];
}
/// <summary>
/// Find the minimum absolute value in an array
/// </summary>
/// <param name="array">The array</param>
/// <param name="exclude_zero">Ignore zero values?</param>
public static double MinAbs(this double[,] array, bool exclude_zero = true)
{
var packed = array.ToPackedArray();
return packed[MinAbsIndex(packed, exclude_zero)];
}
/// <summary>
/// Find the index of the maximum absolute value in an array
/// </summary>
/// <param name="array">The array</param>
public static int MaxAbsIndex(this double[] array)
{
int res = 0;
double x = array[0];
for (int i = 1; i<array.Length; i++)
{
var t = Abs(array[i]);
if (t>x)
{
x=t;
res = i;
}
}
return res;
}
/// <summary>
/// Find the index of the minimum absolute value in an array
/// </summary>
/// <param name="array">The array</param>
/// <param name="exclude_zero">Ignore zero values?</param>
public static int MinAbsIndex(this double[] array, bool exclude_zero = true)
{
int offset = 0;
// skip leading zeros if exclude_zero is enabled.
while (exclude_zero && offset<array.Length && Abs(array[offset])==0)
{
offset++;
}
int res = offset;
double x = Abs(array[offset]);
for (int i = offset+1; i < array.Length; i++)
{
var t = Abs(array[i]);
if (t<x && (t>0 || !exclude_zero))
{
x = t;
res = i;
}
}
return res;
}
这里供参考的是打包(2D或1D)函数,对于double
类型的数组,反向打包(从1D到2D)。
/// <summary>
/// Copy all elements of the native array into a packed array. Elements are arranged row-by-row.
/// For example <c>[1,2 | 3,4] => [1,2,3,4]</c>
/// </summary>
/// <param name="matrix">The native array</param>
/// <returns>The packed array</returns>
public static double[] ToPackedArray(this double[,] matrix)
{
int n = matrix.GetLength(0);
int m = matrix.GetLength(1);
double[] result = new double[n*m];
Buffer.BlockCopy(matrix, 0, result, 0, Buffer.ByteLength(result));
return result;
}
/// <summary>
/// Copy all elements of a packed array into a native array. Elements are arranged row-by-row.
/// For example <c> [1,2,3,4] => [1,2 | 3,4]</c>
/// </summary>
/// <param name="matrix">The packed array</param>
/// <param name="rows">The number of rows in the matrix</param>
/// <param name="columns">The number of columns in the matrix. If 0, this value is calculated from length/rows</param>
/// <returns></returns>
public static double[,] FromPackedArray(this double[] matrix, int rows, int columns = 0)
{
if (columns==0)
{
columns=matrix.Length/rows;
}
double[,] result = new double[rows, columns];
Buffer.BlockCopy(matrix, 0, result, 0, Buffer.ByteLength(result));
return result;
}
答案 2 :(得分:0)
要获取矩阵中的最小值,无需定义新数组即可存储它。 您可以直接遍历矩阵。
int[,] matrix = new int[3, 4] { { 0, -20, 2, 3 }, { 4, 5, 6, -1 }, { 8, 9, -13, 11 } };
int minnum = matrix[0, 0];
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
if (minnum > matrix[i, j])
{
minnum = matrix[i, j];
}
}
}
Console.WriteLine("Minimum = " + minnum);