zjbonrace
2015-01-13 03:55
采纳率: 99.1%
浏览 1.5k
已采纳

link如何解决如下矩阵生成难题

将1~N*N放入一个N*N的矩阵,要求矩阵每行每列以及对角线的和相等。请问怎么实现?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 兔子党-督察 2015-01-13 04:22
    已采纳

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 兔子党-督察 2015-01-13 04:19

    这是算法题, 和LINQ没有关系

    评论
    解决 无用
    打赏 举报
  • 兔子党-督察 2015-01-13 04:22
     using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace MagicMatrix
    {
        class Program
        {
            int[,] mm;
    
            static void Main(string[] args)
            {
                do
                {
                    Program p1 = new Program();
                    int n;
                    Console.WriteLine("请输入矩阵的大小:");
                    n = int.Parse(Console.ReadLine());
    
                    if (n == 0)
                    {
                        Console.WriteLine("请按Enter键离开!");
                        break;
                    }
    
                    if (n % 2 == 0)
                    {
                        Console.WriteLine("请输入奇数!");
                        break;
                    }
    
                    p1.mm = new int[n, n];
                    p1.AssingValue(n);
                    p1.PrintOut(n);
                    Console.WriteLine("\n");
                } while (true);
                Console.ReadLine();
            }
    
            void AssingValue(int n)
            {
                int assingValue = 1;
                int p = n - 1;
                int column = p / 2;
                int row = 0;
    
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        mm[i, j] = 0;
                    }
                }
                mm[row, column] = assingValue;
    
                do
                {
                    assingValue++;
                    column--;
                    row--;
                    if (column < 0 && row < 0)
                    {
                        column++;
                        row++;
                        row++;
                    }
                    else
                    {
                        if (column < 0)
                        {
                            column = p;
                        }
    
                        if (row < 0)
                        {
                            row = p;
                        }
    
                        if (mm[row, column] != 0)
                        {
                            row += 2;
                            column += 1;
                        }
    
                        if (row > n - 1)
                        {
                            row = 0;
                        }
    
                        if (column > n - 1)
                        {
                            column = 0;
                        }
                    }
                    mm[row, column] = assingValue;
                } while (assingValue < n * n);
            }
    
            void PrintOut(int n)
            {
                for (int i = 0; i < n; i++)
                {
                    Console.WriteLine();
                    for (int j = 0; j < n; j++)
                    {
                        Console.Write(mm[i, j] + "\t");
                    }
                }
            }
        }
    }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题