黑白球问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

黑白球问题

问题称述(图中白球一律用红色替换)

如第一个图所示,开始有n个球构成循环,其中黑球和白球任意(包括个数和顺序)。在两个球之间按下面的规定插入新的球:

如果两个球的颜色相同,则插入黑球;否则插入白球……

Matlab程序:

function s=B_W(n)

s=0; %函数值,无效

R=20; %初始循环圈半径

r=2; %黑白球半径

d=5; %向外扩大的半径增长率

k=n; %终止条件

t=linspace(0,2*pi,360);

T=zeros(1,n);%创建角度向量(元素为各小球的圆心所对应的角度)

for i=1:n

T(i)=(i-1)*2*pi/n; %为各求圆心对应的角度赋值

end

initBW=round(rand(1,n)); %创建初始向量,即对应初始黑白球分布图

BW=initBW; %创建生成向量

bw=zeros(1,n+1);%构建中间n+1维向量,并初始化

bw(1:n)=BW;

bw(n+1)=BW(1);%中间向量的最后元素等于第一个元素形成循环

for i=1:k

T=T+pi/n; %随循环,角度的生成

R=R+d; %随循环,外圆半径的生成

for j=1:n

a=R*cos(T(j)); %小球圆心的横坐标

b=R*sin(T(j)); %小球圆心的纵坐标

x=a+r*cos(t);

y=b+r*sin(t);

if BW(j) == 1

fill(x,y,'r'); %画小球(其颜色与中间向量的元素对应,这里用红色代替白色)

else

fill(x,y,'k');%画小球(黑色)

end

hold on;

plot(R*cos(t),R*sin(t),'-');

hold on;

end

%————根据要求实现插入小球对应的中间向量的生成——————

if sum(BW)~=0 && sum(BW)~=n

for l=1:n

if bw(l) == bw(l+1) %相同插0,对应颜色相同时中间插入黑球bw(l)=0;

else

bw(l)=1; %不同插1,对应颜色不同时中间插入白球

end

end

bw(n+1)=bw(1);

BW=bw(1:n);

else

error(''); %%%%————————

end

end

End

n为2、3、4、5、6、7、8、9、10、12、16

相关文档
最新文档