注:系统标识符和自定义标识符都只计为一个字符。即:“int”和“System.Int32”都只算一个字符。
可以引用任何一个.NET自带的程序库,但不允许使用第三方控件和程序库。建议使用VS2005和VS2008环境。
调试代码:
private void PrintBox()
{
     // TODO : 自由发挥
}private void button1_Click(object sender, EventArgs e)
{
    PrintBox();  
}

解决方案 »

  1.   

    其实应该比逻辑,而不是比谁的代码少。class Program
    {
        static Dictionary<string, int> buff;    static void Main(string[] args)
        {
            do
            {
                Console.Write("输入一个整数...");
                int x = int.Parse(Console.ReadLine());
                buff = new Dictionary<string, int>();
                int y = think(x, 1);
                print(y);
            } while (true);
        }    static void print(int 行数)
        {
            for (int i = 1; i <= 行数; i++)
            {
                for (int h = 1; h <= 行数; h++)
                    Console.Write(buff[i.ToString() + "," + h.ToString()]);
                Console.WriteLine();
            }
        }    static int think(int x, int 开始行)
        {
            if (x == 1)
            {
                buff.Add(开始行.ToString() + "," + 开始行.ToString(), 1);
                return 开始行;
            }
            else
            {
                int e = think(x - 1, 开始行 + 1);
                for (int i = 开始行; i <= e + 1; i++)
                {
                    buff.Add(开始行.ToString() + "," + i.ToString(), x);
                    buff.Add((e + 1).ToString() + "," + i.ToString(), x);
                }
                for (int i = 开始行 + 1; i <= e; i++)
                {
                    buff.Add(i.ToString() + "," + 开始行.ToString(), x);
                    buff.Add(i.ToString() + "," + (e + 1).ToString(), x);
                }
                return e + 1;
            }
        }
    }
      

  2.   

    1、我的需求就是比谁写的代码少,这样比的是创意和想象力;
    2、你的代码期望填写在PrintBox()方法中。
    感谢参与。private void PrintBox()
    {
         // TODO : 自由发挥《《《《我期望大家在这里添加代码,输出1-9的图像。
    }private void button1_Click(object sender, EventArgs e)
    {
        PrintBox();  
    }就是说图形是固定的,不需要用户在输入什么。
      

  3.   

    4楼的代码输出结果是正确的,整理成这样,方便比较多少。
    static Dictionary<string, int> buff;static void print(int 行数)
    {
        for (int i = 1; i <= 行数; i++)
        {
            for (int h = 1; h <= 行数; h++)
                Console.Write(buff[i.ToString() + "," + h.ToString()]);
            Console.WriteLine();
        }
        Console.WriteLine("-------");
    }static int think(int x, int 开始行)
    {
        if (x == 1)
        {
            buff.Add(开始行.ToString() + "," + 开始行.ToString(), 1);
            return 开始行;
        }
        else
        {
            int e = think(x - 1, 开始行 + 1);
            for (int i = 开始行; i <= e + 1; i++)
            {
                buff.Add(开始行.ToString() + "," + i.ToString(), x);
                buff.Add((e + 1).ToString() + "," + i.ToString(), x);
            }
            for (int i = 开始行 + 1; i <= e; i++)
            {
                buff.Add(i.ToString() + "," + 开始行.ToString(), x);
                buff.Add(i.ToString() + "," + (e + 1).ToString(), x);
            }
            return e + 1;
        }
    }private void PrintBox_sp1234_4楼()
    {
        for (int x = 1; x <= 9; x++)
        {
            buff = new Dictionary<string, int>();
            int y = think(x, 1);
            print(y);
        }
    }
      

  4.   


    class Program
        {
            static void Main(string[] args)
            {
                print();
                Console.Read();
            }        private static void print()
            {
                
                for( int i=0 ; i<9;i++)
                {
                    for (int j = 0; j < 2 * i + 1; j++)
                    {
                        for (int k = 0; k < 2 * i + 1; k++ )
                        {
                            int tempj, tempk;
                            if (j < i)
                                tempj = i - j ;
                            else
                                tempj = j - i;
                            if (k < i)
                                tempk = i - k ;
                            else
                                tempk = k - i;
                            Console.Write(tempj > tempk ? tempj+1 : tempk+1);
                            Console.Write(" ");                    }
                        Console.Write("\r\n");
                    }
                    Console.WriteLine("---------------------------------");
                }
            }
        }
      

  5.   


    class Program
    {
        static void Main(string[] args)
        {
            PrintBox(9);
        }
        static void PrintBox(int n)
        {
            int[,] a = CreatArray(n);
            for (int i = 0; i < 2 * n - 1; i++)
            {
                for (int j = 0; j < 2 * n - 1; j++)
                {
                    Console.Write(a[i,j]);
                }
                Console.WriteLine();
            }
        }
        static int[,] CreatArray(int n)
        {
            int d = 2 * n - 1;
            int[,] a = new int[d, d];
            if (n == 1)
            {
                a[0, 0] = 1;
                return a;
            }
            int[,] t = CreatArray(n - 1);
            for(int i = 0;i < d;i++)
                for (int j = 0; j < d; j++)
                {
                    if (i > 0 && i < d - 1 && j > 0 && j < d - 1)
                        a[i, j] = t[i-1, j-1];
                    else
                        a[i, j] = n;
                }
            return a;
        }
    }
    递归 n_n
      

  6.   


    private void PrintBox()
    {
         // TODO : 自由发挥
                for (int k = 1; k <= 9; k++)
                {
                    for (int i = 0; i <= 2 * k - 2; i++)
                    {
                        for (int j = 0; j <= k * 2 - 2; j++)
                        {
                            Console.Write(Convert.ToString(Math.Abs(k - 1 - ((Math.Abs(k - i - 1) >= Math.Abs(k - j - 1)) ? i : j)) + 1));
                        }
                        Console.WriteLine();
                    }
                    Console.WriteLine("-------");
                }
    }private void button1_Click(object sender, EventArgs e)
    {
        PrintBox();  
    }
      

  7.   

    using System;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections.Generic;class Hui
    { static void printbox(int n)
    {
    int cntLine = 2*n-1;
    int halfLine = cntLine/2;
    Func<int,string> getLine =(cl)=>
    {
    var strLeft = new StringBuilder();
    var strRight = new StringBuilder();
    int ccolum = -1;
    for (int i =0;i<halfLine;++i) {
    int curNum = n-(ccolum==cl?ccolum:++ccolum);
    strLeft.Append(curNum);
    strRight.Insert (0,curNum);
    }
    strLeft.AppendFormat ("{0}{1}",n - cl,strRight);
    return strLeft.ToString();
    };
    for (int i = 0;i<cntLine;++i)
    {
    Console.WriteLine (getLine(i>halfLine?cntLine-i-1:i));
    }
    }
    static void Main ()
    {
    for (int i=1;i<10;++i) {
    printbox (i);
    Console.WriteLine ("----------------------------------------");
    }
    }
    }
      

  8.   

    略微化减一点点
    private void PrintBox()
    {
                for (int k = 1; k <= 9; k++)
                {
                    for (int i = 1; i < k * 2; i++)
                    {
                        for (int j = 1; j < k * 2; j++)
                        {
                            Console.Write(Convert.ToString(Math.Abs(k - ((Math.Abs(k - i) >= Math.Abs(k - j)) ? i : j)) + 1));
                        }
                        Console.WriteLine();
                    }
                    Console.WriteLine("-------");
                }
    }private void button1_Click(object sender, EventArgs e)
    {
        PrintBox();  
    }
      

  9.   


            private void PrintBox()
            {
                for (int i = 1; i <= 9; i++)
                {
                    int[,] array = new int[i * 2 - 1, i * 2 - 1];
                    array[i - 1, i - 1] = 1;
                    for (int j = 0; j < i * 2 - 1; j++)
                        for (int k = 0; k < i * 2 - 1; k++)
                        {
                            array[j, k] = Math.Max(Math.Abs(j - i + 1), Math.Abs(k - i + 1)) + 1;
                            if (k != i * 2 - 2)
                                Console.Write(array[j, k]);
                            else
                                Console.WriteLine(array[j, k]);
                        }
                    Console.WriteLine("----------");
                }
            }
      

  10.   

    受wdgphc启发,再改改private void PrintBox()
    {
         for (int i = 1; i <= 9; i++)
             for (int j = 0; j < i * 2 - 1; j++)
                 for (int k = 0; k < i * 2 - 1; k++)
                     Console.Write(Math.Max(Math.Abs(j - i + 1), Math.Abs(k - i + 1)) + 1 + (k == i * 2 - 2 ? j == i * 2 - 2 ? "\n------\n" : "\n" : ""));
    }
      

  11.   


    我也改了一下:
    for (int i = 0; i < 9; i++) 
    for (int j = -i; j <= i; j++)
    for (int k = -i; k <= i; k++) 
    Console.Write(Math.Max(Math.Abs(j), Math.Abs(k)) + 1  + (k == i ? j == i ? "\n------\n" : "\n" : "")); 
      

  12.   


    我也改了一下…
    for (int i = 0; i < 9; i++) 
      for (int j = -i; j <= i; j++) 
        for (int k = -i; k <= i; k++) 
          Console.Write(Math.Max(Math.Abs(j), Math.Abs(k)) 
            + 1  
            + (k == i ? j == i ? "\n------\n" : "\n" : "")); 
      

  13.   

    嗯,我来个逻辑最简单的static void PrintBox()
        {
            // TODO : 自由发挥
            Console.WriteLine(@"1
                -------
                222
                212
                222
                -------
                33333
                32223
                32123
                32223
                33333
                -------
                4444444
                4333334
                4322234
                4321234
                4322234
                4333334
                4444444
                -------
                555555555
                544444445
                543333345
                543222345
                543212345
                543222345
                543333345
                544444445
                555555555
                -------
                66666666666
                65555555556
                65444444456
                65433333456
                65432223456
                65432123456
                65432223456
                65433333456
                65444444456
                65555555556
                66666666666
                -------
                7777777777777
                7666666666667
                7655555555567
                7654444444567
                7654333334567
                7654322234567
                7654321234567
                7654322234567
                7654333334567
                7654444444567
                7655555555567
                7666666666667
                7777777777777
                -------
                888888888888888
                877777777777778
                876666666666678
                876555555555678
                876544444445678
                876543333345678
                876543222345678
                876543212345678
                876543222345678
                876543333345678
                876544444445678
                876555555555678
                876666666666678
                877777777777778
                888888888888888
                -------
                99999999999999999
                98888888888888889
                98777777777777789
                98766666666666789
                98765555555556789
                98765444444456789
                98765433333456789
                98765432223456789
                98765432123456789
                98765432223456789
                98765433333456789
                98765444444456789
                98765555555556789
                98766666666666789
                98777777777777789
                98888888888888889
                99999999999999999 ");
        }
      

  14.   

    我只用了一句话,算不算代码最简单^&^
      

  15.   

    先发一贴:static void printbox(int num)
    {
        for (int i = 0; i < num * 2 - 1; i++)
        {
            for (int j = 0; j < num * 2 - 1; j++)
            {            Console.Write(Math.Max(Math.Abs(i - num + 1), Math.Abs(j - num + 1)) + 1);
            }
            Console.WriteLine();
        }
    }
      

  16.   

    发完贴后,才知道有很多人跟我的算法一样,那就再来一贴试试static void printbox()
    {
        for (int num = 1; num < 10; num++)
        {
            int n = num * 2 - 1;
            for (int i = 0; i < n * n; )
            {
                Console.Write((Math.Max(Math.Abs(i % n - num + 1), Math.Abs(i / n - num + 1)) + 1) + (++i % n == 0 ? "\n" : ""));
            }
            Console.Write("-------\n");
        }
    }
      

  17.   


    static void printbox()
    {
        for (int x = 1; x < 10; x++)
        {
            int n = x * 2 - 1;
            for (int i = 0; i < n * n; )
                Console.Write((Math.Max(Math.Abs(i % n - x + 1), Math.Abs(i / n - x + 1)) + 1) + (++i % n == 0 ? "\n" : ""));
            Console.Write("-------\n");
        }
    }
    最简化了 n_n
      

  18.   

    看贴不回好像然被人BS,所以路过回一下.
    看来最简化的公式看来只有以下两个了.
    1. Math.Max(Math.Abs(i - num + 1), Math.Abs(j - num + 1)) + 1
    2. (Math.Max(Math.Abs(i % n - x + 1), Math.Abs(i / n - x + 1)) + 1) + (++i % n == 0 ? "\n" : "")
      

  19.   

    没有人玩玩正则、linq或其他的
      

  20.   

    放在Web工程里调试的,所以多加了一个重载。
    void PrintBox()
    {
    PrintBox(Console.Out);
    } void PrintBox(TextWriter writer)
    {
    StringBuilder line;
    string[] lines;
    for (int num = 1; num <= 9; num++)
    {
    lines = new string[num * 2 - 1];
    line = new StringBuilder(new string(' ', num * 2 - 1));
    for (int l = num; l > 0; l--)
    {
    for (int c = num; c > 0; c--)
    line[num - c] = line[num + c - 2] = (char)((l > c ? l : c) + 48);
    lines[num - l] = lines[num + l - 2] = line.ToString();
    }
    writer.WriteLine(string.Join("\n", lines));
    writer.WriteLine(new string('-', 8));
    }
    }
      

  21.   

    虽然很长,但觉得还算逻辑比较简单const int Number = 5;
    static void Print(string[] args)
    {
    int rank = GetRank(Number);
    int[,] matrix = new int[rank, rank]; for (int i = Number; i > 0; i--)
    {
    SetMatric(matrix, rank, i);
    } PrintResult(rank, matrix);
    }private static int GetRank(int n)
    {
    return n * 2 - 1;
    }private static void SetMatric(int[,] matrix, int rank, int n)
    {
    int row1 = Number - n;
    int row2 = rank - (Number - n) - 1;
    int colOffice = Number - n;
    int count = GetRank(n); for (int i = 0; i < count; i++)
    {
    matrix[row1, colOffice + i] = n;  // 上面行
    matrix[row2, colOffice + i] = n;// 下面行 if (i < count - 2)
    {
    matrix[row1 + i + 1, colOffice] = n;// 左列
    matrix[row1 + i + 1, rank - colOffice - 1] = n;// 右列
    }
    }
    }private static void PrintResult(int rank, int[,] matrix)
    {
    for (int i = 0; i < rank; i++)
    {
    for (int j = 0; j < rank; j++)
    {
    Console.Write(matrix[i, j]);
    }
    Console.Write(Environment.NewLine);
    }
    }
      

  22.   

    //这是完整的代码
    using System;
    class MyClass
    {
        public static int[,] output(int n)
        {
            int[,] final = new int[n * 2 - 1,n * 2 - 1];
            for (int i = n; i >= 1; i--)
            {
                for (int y = 0; y < i * 2 - 1; y++)
                {
                    for (int x = 0; x < i * 2 - 1; x++)
                    {
                        final[x + n - i, y + n - i] = i;
                    }
                }
            }//核心代码只有这么多,下面是打印
            for (int y = 0; y < n * 2 - 1; y++)
            {
                for (int x = 0; x < n * 2 - 1; x++)
                {
                    Console.Write(final[x,y]);
                }
                Console.Write("\n");
            }
        }
        static void Main()
        {
            output(10);
        }
    }
      

  23.   

    我来给正则的:
    private void PrintBox_zswang_73楼()
    {
        string s = "98765432123456789";
        for (char j = '2'; j < ';'; j++)
        {
            string t = Regex.Replace(s, "[" + j + "-:]", "");
            for (int i = 0; i < t.Length; i++)
                Console.WriteLine(
                    Regex.Replace(t, "[1-" + t[i] + "]", t[i].ToString()));
            Console.WriteLine("-------");
        }
    }
      

  24.   


    这个猛。不过代码和下面的差不多for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < i * 2 + 1; j++)
        {
            for (int k = 0; k < i * 2 + 1; k++)
                Console.Write(1 + Math.Max(Math.Abs(j - i), Math.Abs(k - i)));
            Console.WriteLine();
        }
        Console.WriteLine("-------");
    }
      

  25.   

    递归做,超过10就难看了class Program
        {
            static void Main(string[] args)
            {
                test();
                Console.ReadKey();
            }
            static void test()
            {
                for (int i = 1; i < 10; i++) {
                    int[,] result = new int[i * 2 - 1, i * 2 - 1];                print(result, i * 2 - 1, 0, 0, i);
                    test1(result, i);                Console.WriteLine("===============================");
                }
            }
            static void print(int[,] r,int rank,int row,int column,int ran)
            {
                if (rank == 1) {
                    r.SetValue(1, row, column);
                    return;
                }
                
                for (int i = row; i < rank; i++)
                {
                    for (int j = column; j < rank; j++)
                    {
                        if (i == row || j == column || i == rank - 1 || j == rank - 1) r.SetValue(ran, i, j);
                       
                    }
                }            print(r, rank - 1, row + 1, column + 1, ran - 1);
     
            }
            static void test1(int[,] t, int rank) {
                for (int i = 0; i < rank*2-1; i++)
                {
                    for (int j = 0; j < rank * 2 - 1; j++)
                    {
                        Console.Write(t.GetValue(i,j));                }
                    Console.WriteLine();
                }
            }
        }
      

  26.   

    不会 .net 用 Java 写了个来凑热闹,呵呵public class Test01 {
        
        public static void main(String[] args) {
            for(int n = 1; n < 10; n++) {
                for (int i = 0 - (n - 1); i < n; i++) {
                    for (int j = 0 - (n - 1); j < n; j++) {
                        System.out.print(Math.abs(i) >= Math.abs(j) ? Math.abs(i) + 1 : Math.abs(j) + 1);
                    }
                    System.out.println();
                }
                System.out.println("-------");
            }
        }
    }
      

  27.   

    用对角线可以将整个回字形化成4个部分,一样的结构,只是位置不一样而已
    发下我的代码        public void Print(int iCount)
            {
                int iRow = 2 * iCount - 1;
                int[,] array = new int[iRow, iRow];            for (int i = 0; i <iCount ; i++)
                {
                    for (int j = i; j < iRow - i; j++)
                    {
                        // 数据填充部分
                        array[i, j] = iCount - i;
                        array[iRow - 1 - i, j] = iCount - i;                    array[j, i] = iCount - i;
                        array[j, iRow - 1 - i] = iCount - i;
                    }
                }            for (int i = 0; i < iRow; i++)
                {
                    for (int j = 0; j < iRow; j++)
                    {
                        Console.Write(array[i, j].ToString() + " ");
                    }
                    Console.WriteLine();
                }
            }
      

  28.   

    递归,不过太长了,而且字符串拼接次数太多        private void PrintBox()
            {
                for (int i = 1; i < 10; i++)
                {
                    foreach (var item in PrintBoxCore(i))
                    {
                        Console.WriteLine(item);
                    }
                    Console.WriteLine("-----");
                }
            }        private IEnumerable<string> PrintBoxCore(int i)
            {
                string s = i.ToString();
                if (i == 1)
                {
                    yield return s;
                }
                else
                {
                    yield return new string(s[0], i * 2 - 1);
                    foreach (var item in PrintBoxCore(i - 1))
                    {
                        yield return s + item + s;
                    }
                    yield return new string(s[0], i * 2 - 1);
                }
            }
      

  29.   


    #define T 8
    #define N T*2+1
    int M=N;
    int arr[N][N]={0};
    while(M>0)
    {
    for(int i=N-M;i<M;i++)
    {
    for(int j=N-M;j<M;j++)
    {
    arr[i][j]=M-T;
    }
    }
    M--;
    }

    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N;j++)
    {
    printf("%d ",arr[i][j]);
    }
    printf("\n");
    }
      

  30.   


    先贴  自己的破代码逻辑比较简单 =.= 比较土...在学习在ls的各位算法....
    #include<iostream>using namespace std;void PrintBox(int n)
    {
    for(int i = 1; i <= 2 * (n - 1) + 1; i++)
    {
    int m = i > n ? 2 * n - i:i;
    int j = n - m + 1;
    for(int k = n; k > j; k--)
    cout<<k;//每行的递减部分
    for(int k = 1; k <= 2 * (j - 1) + 1; k++)
    cout<<j;//每行的相等部分,输出每个数的第一行 都为2 * (j - 1) + 1次
    for(int k = j + 1; k <= n; k++)
    cout<<k;//每行的递增部分
    cout<<endl;
    }
    }
    int main()
    {
    for(int i = 1; i < 10; i++)
    {
    PrintBox(i);
    cout<<endl;
    cout<<"----------------------------------";
    cout<<endl;
    }
    return 0;
    }
      

  31.   

    a(i,j)=max(|n-i|,|n-j|)+1;
            static void  PrintBox(int m)
            {
                for (int n=1;n<=m;n++)
                {
                    int p=2*n-1;
                    for (int i=1;i<=p;i++)
                        for (int j=1;j<=p;j++)
                            Console.Write(Math.Max(Math.Abs(n-i),Math.Abs(n-j))+1);
                        Console.Write("\n");
                    Console.Write("-------\n");
                }
            }
      

  32.   

            static void  PrintBox(int m)
            {
                for (int n=1;n<=m;n++)
                {
                    int p=2*n-1;
                    for (int i=1;i<=p;i++)
                    {
                        for (int j=1;j<=p;j++)
                            Console.Write(Math.Max(Math.Abs(n-i),Math.Abs(n-j))+1);
                        Console.Write("\n");
                    }
                    Console.Write("-------\n");
                }
            }
      

  33.   

            static void  PrintBox(int m)
            {
                for (int n=1;n<=m;n++)
                {
                    int p=2*n-1;
                    for (int i=1;i<=p;i++)
                    {
                        for (int j=1;j<=p;j++)
                            Console.Write(Math.Max(Math.Abs(n-i),Math.Abs(n-j))+1);
                        Console.Write("\n");
                    }
                    Console.Write("-------\n");
                }
            }
      

  34.   

            static void  PrintBox(int m)
            {
                for (int n=1;n<=m;n++)
                {
                    int p=2*n-1;
                    for (int i=1;i<=p;i++)
                    {
                        for (int j=1;j<=p;j++)
                            Console.Write(Math.Max(Math.Abs(n-i),Math.Abs(n-j))+1);
                        Console.Write("\n");
                    }
                    Console.Write("-------\n");
                }
            }