📄 coin_final.m
字号:
m=input('请输入硬币的个数:m=(0<m<1000)'); %请求用户输入硬币的个数m
while m<1|m~=fix(m)|m>1000 %检查所输入的m,如果m<1或
fprintf('输入错误!请重新输入:\n') %m>1000或m不是整数时,输出
m=input('请输入硬币的个数:m=(0<m<1000)'); %错误提示,并用while语句实现重新输入
end
if m==1 %判断输入m是否为1,若为1,显然输出结果应为2,程序在此终止
fprintf('为了使一摞数量为1枚硬币的每一枚都是正面朝上所必须翻的次数为:2\n')
else
flag=0; %作为判断翻转完成的标志变量,初值赋0
time=0; %记录翻转的次数
a=ones(1,m); %生成 一个m维的单位数组,表示翻转前全部正面的状态
while(~flag) %判断将整摞硬币都翻转后,是否完成
for i=1:m %将整摞硬币翻转一次的循环
if flag==0 %循环仅在翻转未完成时进行
for j=1:i %通过将数组每个元素乘以-1,实现每枚硬币的翻面
a(j)=a(j)*(-1); %a中每个元素随时记录当时的状态
end
for j=1:fix(i/2) %用循环和临时变量temp,实现硬币位置的调换
temp=a(j);
a(j)=a(i-j+1);
a(i-j+1)=temp;
end %到此,一次翻转完成
time=time+1; %用time记录翻转的次数
if sum(a)==m %判断所有硬币是否全部为正面
flag=1; %若为正面,标志变量赋1
end
end
end
end %当标志变量为1时,跳出所有循环,并将输出结果显示在屏幕上
fprintf('为了使一摞数量为%d枚硬币的每一枚都是正面朝上所必须翻的次数为:%d\n',m,time)
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -