麻烦来看看这个数字三角形怎样打印出来~~~~

wangsi001 2012-09-21 10:35:56
如果用户输入5的话,就输出这样一个结果
1
2 12
3 13 11
4 14 15 10
5 6 7 8 9

三角形差不多就是这样,想了很久都没有做出来,如果有知道的,提供一个思路就可以了,让我再试试~~~
...全文
697 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_O_neill 2012-09-24
  • 打赏
  • 举报
回复
sp1234很厉害啊,看来今天收获不小啊
skyeg 2012-09-24
  • 打赏
  • 举报
回复
哈 234楼的都挺好的么
threenewbee 2012-09-22
  • 打赏
  • 举报
回复
不过我之前说了那个程序是如此简单,如果加上只要利用控制台光标移动画出三角这个限定条件还是做不出来,那就只能用弱智形容了。
threenewbee 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
楼上的,下结论可真快。不过觉得2楼的代码更精辟简单。
[/Quote]

根本没有可比性。一个是输出产生完整的结果,一个是利用光标移动在控制台画出这个三角。

当然,估计学校学员应该后者就可以哄骗老师了。
annwatasi 2012-09-22
  • 打赏
  • 举报
回复
即,这个帖子的3楼。
annwatasi 2012-09-22
  • 打赏
  • 举报
回复
楼上的,下结论可真快。不过觉得2楼的代码更精辟简单。
threenewbee 2012-09-22
  • 打赏
  • 举报
回复
估计你们是一个学校的,那个题目应该是你师兄问的。
threenewbee 2012-09-22
  • 打赏
  • 举报
回复
一样的题目,以前回答过,你要是搜索下,就省了20分了。

http://topic.csdn.net/u/20120129/22/8409c365-757d-4031-ab2d-9c967c176bce.html
annwatasi 2012-09-22
  • 打赏
  • 举报
回复
原来是递归,,哈哈,嗯,我有待学习继续成长。多谢指教。呵呵。…………^^

[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
楼上的好专业,看不懂,O(∩_∩)O哈哈~。打个酱油。


你的解释我才没有看懂呢啊。呵呵


我来简单分析一下思路。任何优秀的算法基本上都是递归的,因此如果你学会“一分为二”地去复用其自身的算法结构,就会迅速解决问题。否则,可能往往花费了巨大的时间去拼凑数字。


先来看n=15时的输出:

Assembly code

1

……
[/Quote]
  • 打赏
  • 举报
回复
顺便再说一个基本算法知识。递归程序改变为迭代程序,其实是非常机械的。比如说我们可以手工为方法接口参数上增加一个“累计器”参数(类似于自定义的数据栈),通过稍微修改代码次序,就能将递归程序改变为迭代程序。

c#编译器有个非常伟大的功能,就是能够自动将 yield return 编译为迭代程序。很智能,我们就可以把精力放在写出清晰的算法上,而不用因为纠结于底层的“递归变迭代”的过程而把原本易读的程序改得面目全非。


但是这个例子恰恰不需要使用那么复杂。因为对于“尾递归”,直接写一条goto语句(或者一个while循环)就能将它修改为迭代程序了,其它代码几乎不需要改变。例如这个程序可以修改为:
using System;

namespace ConsoleApplication1
{
class Program
{

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

private static void 画三角形(int x, int y, int a, int n)
{
begin:
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;
goto begin;
}
}

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

}
}


将递归程序修改为迭代程序的好处,是可以在很大程度上解决“栈溢出”的问题。
wangsi001 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

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

namespace ConsoleApplication1
{
class Program
{

static void Main(string[] args)
{
画三角形(1, 1, 1, 9);
Console.R……
[/Quote]

谢了!!我一边调试一边想,才看懂了!也谢谢你的分析思路~~~~~~
wangsi001 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

有啦,不知道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为结束标志……
[/Quote]

我开始的想法也是跟你一样的,下存入数组中,再往坐标上面填,结果绕着绕着就昏过去了~~~~
sunylf 2012-09-22
  • 打赏
  • 举报
回复
sp1234,分析的很到位,學習!
threenewbee 2012-09-22
  • 打赏
  • 举报
回复
我的意思是,这个题目你能完成老师的教学要求就ok了。无论什么方法,包括移动光标,如果你能掌握,就很好,而不是说我得到了几个程序,很神奇地一贴,运行出结果,在根本不去消化理解程序思路的情况下谈什么这个简洁那个复杂之类的空话。
关键是看你自己学到了多少。悲剧的就是一样的程序,每个人都是来张口要个现成的然后交差了事,没有人关心程序本身。结果是sp1234“锻炼”了下编程技能,事实上他是浪费了时间,他根本不需要再这样的锻炼,而真正需要锻炼的人错过了学习思考的机会。
threenewbee 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
你可以去我博客看我写的蛇形矩阵算法,那个比这个还要难。
在我空间搜蛇形矩阵就可以。
如果你看懂了,如果想搞得好点可以想办法用switch语句替换我写得那几个up down函数。
如果你看不懂,我送你个更简单的解法。
这个题目很经典,yahoo等公司经常考到,做不出很正常
[/Quote]

“经典”的面试题唯一的作用就是把连搜索引擎都不会的,比码农还傻的人先过滤一下。

事实上(包括我想sp1234应该也有经验)90%来求职的人都是浪费公司人力资源部门成本的没用的人。
annwatasi 2012-09-22
  • 打赏
  • 举报
回复
当然,1 这个特例,可以单独列出来。
annwatasi 2012-09-22
  • 打赏
  • 举报
回复
嗯,听你解释明白了。但是,我们这里没有人加上 “如果加上只要利用控制台光标移动画出三角”这个条件啊,
你不能否认,这也是楼主出的这个题目的规律之一啊。又不是一个问题只能一种解法。
我只是觉得3楼的代码更直观。

至于解法更符合大众的观点,不是我决定的,我只是表达我的喜好。
以上。

P.S. 你这个解释很合理。


[Quote=引用 19 楼 的回复:]
引用 15 楼 的回复:
这个回复没有明白,什么叫“如果加上只要利用控制台光标移动画出三角这个限定条件”,
而且楼主也没限定方法啊,只要看到的是想要的不就好啦。


引用 14 楼 的回复:
不过我之前说了那个程序是如此简单,如果加上只要利用控制台光标移动画出三角这个限定条件还是做不出来,那就只能用弱智形容了。


这种思维方式比不会写程序更糟糕。在没有限定条件下,应该考虑的是可……
[/Quote]
threenewbee 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
这个回复没有明白,什么叫“如果加上只要利用控制台光标移动画出三角这个限定条件”,
而且楼主也没限定方法啊,只要看到的是想要的不就好啦。


引用 14 楼 的回复:
不过我之前说了那个程序是如此简单,如果加上只要利用控制台光标移动画出三角这个限定条件还是做不出来,那就只能用弱智形容了。
[/Quote]

这种思维方式比不会写程序更糟糕。在没有限定条件下,应该考虑的是可能条件的并集而不是子集,这是软件工程的基本常识,如果连这个都不懂,无论你怎么写程序都只能停留在课堂上耍小聪明的程度。
zzhays 2012-09-22
  • 打赏
  • 举报
回复
你可以去我博客看我写的蛇形矩阵算法,那个比这个还要难。
在我空间搜蛇形矩阵就可以。
如果你看懂了,如果想搞得好点可以想办法用switch语句替换我写得那几个up down函数。
如果你看不懂,我送你个更简单的解法。
这个题目很经典,yahoo等公司经常考到,做不出很正常
  • 打赏
  • 举报
回复
这确实是课堂练习!
加载更多回复(10)

110,618

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧