⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coin_final.m

📁 一、问题叙述: 一摞硬币共m枚
💻 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 + -