将矩阵乘以用户输入
Multiply matrix by user input
这是一个将矩阵乘以多个用户输入的代码示例。该动作应重复用户输入的次数。例如,如果我输入数字 3,我会得到 3 个相同的打印矩阵。相反,我希望该矩阵乘以数字 3 3 次(每个新矩阵乘以数字 3)。有谁知道我该怎么做?谢谢
*using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace user_input
{
class Program
{
static void Main(string[] args)
{
string[] nodes = { "1", "2", "3", "4", "5", "6" };
int[,] adjmatrix = new int[,]
{{2,7,3,8,4},
{7,0,8,2,6},
{6,8,4,9,7},
{8,5,9,8,8},
{4,9,7,8,1}
};
int[,] newmatrix = new int[adjmatrix.GetLength(0), adjmatrix.GetLength(1)];
Printmatrix(adjmatrix, nodes, nodes, "Input Matrix");
Newline();
int n = 0;
System.Console.WriteLine("Please enter a number");
n = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < n; i++)
{
MultipliedMatrix(ref newmatrix, adjmatrix, n);
Newline();
Printmatrix(newmatrix, nodes, nodes, "Multiplied Matrix");
}
Console.ReadKey();
}
private static void Newline()
{
Console.Write("\n");
}
private static void MultipliedMatrix(ref int[,] newmatrix, int[,] adjmatrix, int n)
{
for (int i = 0; i < adjmatrix.GetLength(0); i++)
{
for (int j = 0; j < adjmatrix.GetLength(1); j++)
{
newmatrix[i, j] = adjmatrix[i, j] * n;
}
}
}
private static void Printmatrix(int[,] adjmatrix, string[] nodes_h, string[] nodes_v, string title)
{
if (adjmatrix.GetLength(0) != 0)
{
Console.ForegroundColor = ConsoleColor.White;
Console.Write("{0}\n", title);
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("\t");
for (int i = 0; i < adjmatrix.GetLength(0); i++)
Console.Write("{0}\t", nodes_v[i]);
for (int i = 0; i < adjmatrix.GetLength(0); i++)
{
Newline();
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("{0}\t", nodes_h[i]);
for (int j = 0; j < adjmatrix.GetLength(1); j++)
{
Console.ForegroundColor = ConsoleColor.DarkGray;
if (adjmatrix[i, j] < 500) Console.Write("{0}\t", adjmatrix[i, j]);
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("-\t", adjmatrix[i, j]);
}
}
Console.ForegroundColor = ConsoleColor.White;
}
Newline();
}
}
}
}*
*
您一直将相同的矩阵作为输入传递给 MultipliedMatrix()
,所以它一直在做同样的事情。
要使其对新矩阵进行操作,请在循环内调用 Printmatrix()
后立即添加以下行:
adjmatrix = newmatrix;
或者(更好的 IMO)是将 MultipliedMatrix()
更改为 return 新矩阵,如下所示:
private static int[,] MultipliedMatrix(int[,] adjmatrix, int n)
{
int[,] newmatrix = new int[adjmatrix.GetLength(0), adjmatrix.GetLength(1)];
for (int i = 0; i < adjmatrix.GetLength(0); i++)
for (int j = 0; j < adjmatrix.GetLength(1); j++)
newmatrix[i, j] = adjmatrix[i, j] * n;
return newmatrix;
}
那么乘法循环中的代码将如下所示:
for (int i = 0; i < n; i++)
{
adjmatrix = MultipliedMatrix(adjmatrix, n);
Newline();
Printmatrix(adjmatrix, nodes, nodes, "Multiplied Matrix");
}
请注意,这会丢失对原始 adjmatrix
的引用,这对您当前的代码来说不是问题。
但是,如果您需要保留原始参考,请这样做:
var newMatrix = adjmatrix;
for (int i = 0; i < n; i++)
{
newMatrix = MultipliedMatrix(newMatrix, n);
Newline();
Printmatrix(adjmatrix, nodes, nodes, "Multiplied Matrix");
}
首先我会将乘法更改为函数而不是 void 方法调用,因此它看起来比 then
这将是伪代码:
n = userinput;
i=0;
int[,] result;
do
i+=1;
result = MultiplyMatrix(result, n);
while i<n
int[,] MultiplyMatrix(adjmatrix, n){
(multiply)
return resultMatrix };
这是一个将矩阵乘以多个用户输入的代码示例。该动作应重复用户输入的次数。例如,如果我输入数字 3,我会得到 3 个相同的打印矩阵。相反,我希望该矩阵乘以数字 3 3 次(每个新矩阵乘以数字 3)。有谁知道我该怎么做?谢谢
*using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace user_input
{
class Program
{
static void Main(string[] args)
{
string[] nodes = { "1", "2", "3", "4", "5", "6" };
int[,] adjmatrix = new int[,]
{{2,7,3,8,4},
{7,0,8,2,6},
{6,8,4,9,7},
{8,5,9,8,8},
{4,9,7,8,1}
};
int[,] newmatrix = new int[adjmatrix.GetLength(0), adjmatrix.GetLength(1)];
Printmatrix(adjmatrix, nodes, nodes, "Input Matrix");
Newline();
int n = 0;
System.Console.WriteLine("Please enter a number");
n = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < n; i++)
{
MultipliedMatrix(ref newmatrix, adjmatrix, n);
Newline();
Printmatrix(newmatrix, nodes, nodes, "Multiplied Matrix");
}
Console.ReadKey();
}
private static void Newline()
{
Console.Write("\n");
}
private static void MultipliedMatrix(ref int[,] newmatrix, int[,] adjmatrix, int n)
{
for (int i = 0; i < adjmatrix.GetLength(0); i++)
{
for (int j = 0; j < adjmatrix.GetLength(1); j++)
{
newmatrix[i, j] = adjmatrix[i, j] * n;
}
}
}
private static void Printmatrix(int[,] adjmatrix, string[] nodes_h, string[] nodes_v, string title)
{
if (adjmatrix.GetLength(0) != 0)
{
Console.ForegroundColor = ConsoleColor.White;
Console.Write("{0}\n", title);
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("\t");
for (int i = 0; i < adjmatrix.GetLength(0); i++)
Console.Write("{0}\t", nodes_v[i]);
for (int i = 0; i < adjmatrix.GetLength(0); i++)
{
Newline();
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("{0}\t", nodes_h[i]);
for (int j = 0; j < adjmatrix.GetLength(1); j++)
{
Console.ForegroundColor = ConsoleColor.DarkGray;
if (adjmatrix[i, j] < 500) Console.Write("{0}\t", adjmatrix[i, j]);
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("-\t", adjmatrix[i, j]);
}
}
Console.ForegroundColor = ConsoleColor.White;
}
Newline();
}
}
}
}*
*
您一直将相同的矩阵作为输入传递给 MultipliedMatrix()
,所以它一直在做同样的事情。
要使其对新矩阵进行操作,请在循环内调用 Printmatrix()
后立即添加以下行:
adjmatrix = newmatrix;
或者(更好的 IMO)是将 MultipliedMatrix()
更改为 return 新矩阵,如下所示:
private static int[,] MultipliedMatrix(int[,] adjmatrix, int n)
{
int[,] newmatrix = new int[adjmatrix.GetLength(0), adjmatrix.GetLength(1)];
for (int i = 0; i < adjmatrix.GetLength(0); i++)
for (int j = 0; j < adjmatrix.GetLength(1); j++)
newmatrix[i, j] = adjmatrix[i, j] * n;
return newmatrix;
}
那么乘法循环中的代码将如下所示:
for (int i = 0; i < n; i++)
{
adjmatrix = MultipliedMatrix(adjmatrix, n);
Newline();
Printmatrix(adjmatrix, nodes, nodes, "Multiplied Matrix");
}
请注意,这会丢失对原始 adjmatrix
的引用,这对您当前的代码来说不是问题。
但是,如果您需要保留原始参考,请这样做:
var newMatrix = adjmatrix;
for (int i = 0; i < n; i++)
{
newMatrix = MultipliedMatrix(newMatrix, n);
Newline();
Printmatrix(adjmatrix, nodes, nodes, "Multiplied Matrix");
}
首先我会将乘法更改为函数而不是 void 方法调用,因此它看起来比 then
这将是伪代码:
n = userinput;
i=0;
int[,] result;
do
i+=1;
result = MultiplyMatrix(result, n);
while i<n
int[,] MultiplyMatrix(adjmatrix, n){
(multiply)
return resultMatrix };