作者HPChou (Hugh)
看板C_Sharp
标题Re: [问题] 请问一个关於while的用法
时间Sat Feb 4 09:22:38 2006
这是用递回的方式去解魔术方阵
如果成功的话会秀出方阵,
※ 引述《polaristing (北极星的小鼎)》之铭言:
: 我再写的问题是一个3*3的魔术方阵
: 排列1~9 使不管是横的.直的或斜的总和均相同
: ex: 4 3 8
: 9 5 1
: 2 7 6
: 下面是原本完整的程式码 还有一些我其他不太清楚的问题
: static void Main(string[] args)
: {
: int[,] X=new int [3,3];
: X[1,1]=5;
: while(!Assign(X,9));
: }
: static bool Assign(int[,] X,int count)
: {
: int i,j;
: if(count==5)
: {
: if(Check(X))
: {
: Show(X);
: Console.WriteLine();
: return true;
: }
: else
: return false;
: }
: 当count = 5之後 下面的程式还会执行吗
: 还是说 return 完之後就跳出这个method吗
: 如果执行下面的程式了 又是如何终止整个程式
不会,当 count = 5 只做CHECK 是否符合要求
以及符合就把方阵印出来,这边的检查结果会
一直传到 main 做为是否结束的依据
: Random r=new Random();
: while(true)
: {
: i=r.Next(0,3);
: j=r.Next(0,3);
: if(X[i,j]==0) break;
: }
上面的 while 是找没有被写过的地方
: X[i,j]=count;
: X[2-i,2-j]=10-count;
填值到刚刚找到的地方
: bool ra=Assign(X,count-1);
用递回的方式去填 count-1
: X[i,j]=0;
: X[2-i,2-j]=0;
: 这边 什麽时候会执行阿
除了count = 5以外,每次呼叫Assign都
会做,假设某次寻找失败,如果不清掉这
次的结果,下次寻找时会因为找不到地方
可以写,而卡死在上面的while里
: return ra;
: }
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.38.206
1F:→ polaristing:懂了 谢谢各位的指教 m(_ _)m 02/04 14:59