第4题我觉得可以用递归回朔的方法。
这样比穷举计算次数要少些,但是因为递归会使效率下降。
所以综合起来就不知道哪个优了!

Fight to win or die...
| 全能ASP/PHP/ASP.NET主机,支持月付 | 专业 MSSQL 数据库空间,支持月付 | 专业 MySQL 数据库空间,支持月付 | 买域名,送MP3、MP4 |
| 高端软件开发 = 年薪十万不是梦 | 赛孚耐:软件保护加密专家 | 身份认证令牌USB KEY | 买空间,免费送域名(厦门中资源) |
我试了啊,报错了,我理解的:静态数组大小只能是常量。
但是确实在某些编译器上允许这样。
我机器上有3个,所以就测试了3次,dev-cpp中可以,vc不可以。
所以我疑惑。根据我目前所了解,可以设置大小只能用动态数组!

我大致看了下HJin对这个问题的解法,我如果写,我也会有个同样的问题,不仅这个问题,一切有关类似这样的递归回溯的问题都存在,比如皇后,比如我在46楼写那个题。
我很想看看kai你是怎么处理当n很大时的情况。当然,不要让程序一直运行个几天才算出来,呵呵~(我想的话)。

第三题:(算法来自第69楼)
#include "iostream.h"
#include "stdio.h"
#include "iostream.h"
#include "conio.h"
main()
{
char ch[11]={'T','J','1','2','3','4','5','6','7','8','9'};
char output[21][21];
int i,j,m=0;
int x=1;
while (x)
{
while (!((m>=3&&m<=21)))
{
step: printf("输入一个3到20之间的数:");
scanf("%d",&m);
}
for(i=m;i>=0;i--)
{
for(j=i;j<=m-i;j++)
{
output[i][j]=ch[i];
output[j][i]=ch[i];
output[m-i][m-j]=ch[i];
output[m-j][m-i]=ch[i];
}
}
for (i=0;i<m;i++)
{
for (j=0;j<m;j++)
{
cout<<output[i][j];
}
cout<<"\n";
}
cout<<"输入任意数字继续,输入0退出!";
scanf("%d",&x);
if (x!=0) goto step;
}
}


说的很有道理,但是递归对内存的开销并不都是不必要啊。难道所有的递归算法都可以被迭代取代而不用到栈?
期待你的solution,这样说不好懂
。
呵呵


