|
发表于 2004-9-15 04:50:21
|
显示全部楼层
我的matlab程序
<>前面的同志说的不错,必须得是偶数个旗子才能一定有最终的结果,如果是奇数个的话,可能回进入死循环.上边有不少人用c编程实现,我用matlab随便编了一个一般的函数(很简单的程序),函数中参数可以输入任意多个由-1和1组成的向量,其中-1表示白子,黑子表示1.然后可以借助此函数编程序对任意偶数个旗子的情况进行遍历,证明了结果全是黑子.</P>
<>下面是求N个旗子的一般函数:</P>
<>function y=colour(varargin)
%调用格式:colour(a),a是一个一维的由-1,1组成的向量,个数必须为偶数,其中-1表示白子,1表示黑子。
n=length(varargin);
if mod(n,2)~=0
input('出错,旗子个数必须得是偶数');
else
for i=1:n
a(i)=varargin{i};
end
b=ones(1,n);
while ~all(b==a)
b=a;
for i=1:n-1
a(i)=b(i)*b(i+1);
end
a(n)=b(n)*b(1);
end
y=a;
end</P>
<P>以上程序存为colour.m后在matlab工作窗口中输入:</P>
<P>>> colour(1,-1,1,1,-1,1,1,-1)</P>
<P>ans =</P>
<P> 1 1 1 1 1 1 1 1
表明结果全为黑子.</P>
<P>如果旗子个数为奇数,则出错,如:</P>
<P>>> colour(1,-1,1)
出错,旗子个数必须得是偶数</P> |
|