日期:2014-05-17 浏览次数:21045 次
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
------解决方案--------------------