链接: https://pan.baidu.com/s/1OrLm5PLoFK8oH-foAySgAQ
提取码: u3wq
链接: https://pan.baidu.com/s/1OrLm5PLoFK8oH-foAySgAQ
提取码: u3wq
线性代数。。重学了一遍,o(╥﹏╥)o。。。
using System;
using System.Linq;
using System.Collections.Generic;
namespace ConsoleApp1
{
class Matrix
{
int size;
int[,] a;
public Matrix(int n)
{
size = n;
a = new int[n, n];
}
public void read()
{
for (int i = 0; i < size; ++i)
{
string[] words = Console.ReadLine().Trim().Split(null);
if (words.Length != size)
{
Console.WriteLine("bad input");
throw new Exception("bad input");
}
for (int j = 0; j < size; ++j)
a[i, j] = int.Parse(words[j]);
}
}
public static Matrix operator +(Matrix a, Matrix b)
{
var size = a.size;
var m = new Matrix(size);
for (var i = 0; i < size; i++)
for (var j = 0; j < size; j++)
m.a[i, j] = a.a[i, j] + b.a[i, j];
return m;
}
public static Matrix operator -(Matrix a, Matrix b)
{
var size = a.size;
var m = new Matrix(size);
for (var i = 0; i < size; i++)
for (var j = 0; j < size; j++)
m.a[i, j] = a.a[i, j] - b.a[i, j];
return m;
}
public static Matrix operator *(Matrix a, Matrix b)
{
var size = a.size;
var m = new Matrix(size);
for (var i = 0; i < size; i++)
{
for (var j = 0; j < size; j++)
{
var sum = 0;
for (var k = 0; k < size; k++)
{
sum += a.a[i, k] * b.a[k,j];
}
m.a[i, j] = sum;
}
}
return m;
}
public void print()
{
var last = size - 1;
for (var i = 0; i < size; i++)
{
for (var j = 0; j < size; j++)
{
Console.Write(a[i, j]);
if (j != last) Console.Write(" ");
}
if (i != last) Console.Write("\n");
}
}
}
class Program
{
public static void Main()
{
var arr = Console.ReadLine().Split(' ').Select(i => int.Parse(i)).ToArray();
var Matrixs = new Matrix[arr[1]];
for (var i = 0; i < arr[1]; i++)
{
Matrixs[i] = new Matrix(arr[0]);
Matrixs[i].read();
Console.ReadLine();
}
var exps = Console.ReadLine().Trim().Split(' ');
Stack<Matrix> q = new Stack<Matrix>();
Matrix a, b;
foreach (var exp in exps)
{
switch (exp)
{
case "+": q.Push(q.Pop() + q.Pop()); break;
case "-": a = q.Pop(); b = q.Pop(); q.Push(b - a); break;
case "*": a = q.Pop(); b = q.Pop(); q.Push(b*a); break;
default: q.Push(Matrixs[int.Parse(exp) - 1]); break;
}
}
q.Pop().print();
}
}
}