【问题标题】:Multiply matrix by user input用户输入乘以矩阵
【发布时间】:2025-12-31 07:35:12
【问题描述】:

这是一个将矩阵乘以用户输入数量的代码示例。该操作应按用户输入的数量重复。例如,如果我输入数字 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();
            }
        }
    }
}*

*

【问题讨论】:

    标签: c# multidimensional-array visual-studio-2015 user-input


    【解决方案1】:

    首先我会将乘法更改为一个函数而不是 void 方法调用,所以它看起来更好

    这将是伪代码:

    n = userinput;
    i=0;
    int[,] result;
    
    do
      i+=1;
      result = MultiplyMatrix(result, n);
    while i<n
    
    
    int[,] MultiplyMatrix(adjmatrix, n){
       (multiply)  
       return resultMatrix }; 
    

    【讨论】:

      【解决方案2】:

      您一直将相同的矩阵作为输入传递给MultipliedMatrix(),所以它一直在做同样的事情。

      要使其对新矩阵进行操作,请在循环内对 Printmatrix() 的调用之后立即添加以下行:

      adjmatrix = newmatrix;
      

      另外(更好的 IMO)是更改 MultipliedMatrix() 以返回新矩阵,如下所示:

      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");
      }
      

      【讨论】: