c#编程题,矩阵表达式,进链接看文本,会的留下代码,注释

链接: 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();
        }
    }
}

 

 代码都很简单,就是最后表达式分析要用到后进先出队列

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++)
                    m.a[i, j] = a.a[i, j] * b.a[i, j];
            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 List<Matrix>();
            for (var i = 0; i < arr[1]; i++)
            {
                Matrixs.Add(new Matrix(arr[0]));
                Matrixs[i].read();
                Console.ReadLine();
            }
            var exps = Console.ReadLine().Trim().Split(' ');
            Stack<Matrix> q = new Stack<Matrix>();
            foreach (var exp in exps)
            {
                switch (exp)
                {
                    case "+": q.Push(q.Pop() + q.Pop()); break;
                    case "-": Matrix a = q.Pop(), b = q.Pop(); q.Push(b - a); break;
                    case "*": q.Push(q.Pop() * q.Pop()); break;
                    default: q.Push(Matrixs[int.Parse(exp) - 1]); break;
                }
            }
            q.Pop().print();
        }
    }
}

 

over3

 

over1