黑白球问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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