日期:2014-05-17  浏览次数:20821 次

麻烦来看看这个数字三角形怎样打印出来~~~~
如果用户输入5的话,就输出这样一个结果
1
2 12  
3 13 11
4 14 15 10
5 6 7 8 9

三角形差不多就是这样,想了很久都没有做出来,如果有知道的,提供一个思路就可以了,让我再试试~~~

------解决方案--------------------
或者把n值变化改得更“一致”一些:
C# code
using System;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            画三角形(1, 1, 1, 9);
            Console.ReadKey();
        }

        private static void 画三角形(int x, int y, int a, int n)
        {
            for (var i = 0; i < n - 1; i++)
                输出(x, y++, a++);
            for (var i = 0; i < n - 1; i++)
                输出(x++, y, a++);
            for (var i = 0; i < n - 1; i++)
                输出(x--, y--, a++);
            n -= 3;
            if (n > 0)
            {
                x++;
                y += 2;
                画三角形(x, y, a, n);
            }
        }

        private static void 输出(int x, int y, int a)
        {
            Console.CursorLeft = x * 4;
            Console.CursorTop = y * 2;
            Console.Write(a);
        }

    }
}

------解决方案--------------------
有啦,不知道C#如何实现,但是我的想法可能太绕了。
比如 输入 5
计算一个值 1+2+3+4+5=15 则所有打印的数字为1~15
1~15 分别存入 一个数组,比如数组A[0]=1 ..类推
现在,我们找数字的打印顺序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
我们用坐标标示
11 21 31 41 51[1结束的顺序已输入的数字5为结束标志]
然后是最低下 52 53 54 55
这个三角形式逆时针包围,所以,紧接着是上一行缩进
44 33 22 接着笔直下来

32 42 然后横行走 43 如果还有就继续上一行缩进

这些坐标可以是对应地址,可以是数组的下标。
排列下就是 11~55

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
11 21 31 41 51 52 53 54 55 44 33 22 32 42 43

11 
21 22
31 32 33
41 42 43 44
51 52 53 54 55

1
2 12
3 13 11
4 14 15 10 
5 6 7 8 9
 
------解决方案--------------------
探讨
楼上的好专业,看不懂,O(∩_∩)O哈哈~。打个酱油。