数学黑洞matlab编程解决,matlab20道试题及解答

41528d3028836879cd698677c3999917.gifmatlab20道试题及解答

试题 1. “数学黑洞”:任意一个 4 位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,最终会出现一个神秘的数,请编程输出这个神秘的数。clear;a=( 请输入一个四位正整数: ); str_a=num2str(a); %将 a 转化为一个字符串b_min=str2double(sort(str_a)); %形成最小数b_max=str2double(sort(str_a, descend )); %形成最大数b=b_max-b_min; %求最大数与最小数之差while (b~=a)a=b;str_a=num2str(a); %将 a 转化为一个字符串b_min=str2double(sort(str_a)); %形成最小数b_max=str2double(sort(str_a, descend )); %形成最大数b=b_max-b_min; %求最大数与最小数之差endb试题 2.将数字 1、2、3、4、5、6 填入一个 2 行 3 列的表格中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比上面的数字大。请编写程序求出按此要求可有几种填写方法。a(1)=1;a(6)=6;count=0; %用来计数b=perms( 2345 ); %产生 2345 的全排列[m,n]=size(b);for i=1:mtemp=b(i,:);a(2)=str2double(temp(1));a(3)=str2double(temp(2));a(4)=str2double(temp(3));a(5)=str2double(temp(4));if ((a(4)>a(2))c=reshape(a,2,3); %将 a 向量转化为 2*3 矩阵输出disp(c);endenddisp([ 共有 ,num2str(count), 种填写方法 ]); %输出填写方法的种数试题 3.编写成绩排序程序。按学生的序号输入学生的成绩,按照分数由高到低的顺序输出学生的名次,该项名次的分数、相同名次的人数和学号;同名次的学号输出在同一行中,一行最多输出 10 个学号。clear;a=zeros(1,2); %用 a 矩阵来存放学生的学号和成绩,每一行代表一个学生num=( 请输入学号: );score=( 请输入成绩: );i=0;while (~isempty(num))i=i+1;a(i,1)=num;a(i,2)=score;num=( 请输入学号: );score=( 请输入成绩: );endb=sortrows(a,-2); %按第 2 列进行降序排列mc=(1:i) ;b=[mc,b]; %加了名次之后的学生成绩,且已按高分到低分排序,第 1 列表示名次,第 2 列表示学号,第 3 列表示成绩%b 矩阵共有 i 行%下面处理并列名次for j=2:iif (b(j,3)==b(j-1,3)) %若成绩相等, 则名次应相同b(j,1)=b(j-1,1);endend%下面输出矩阵disp([ 名次 , 学号 , 成绩 , 人数 ]);j=1; %从第 1 名开始while (j?df12345,将其中连续的数字作为一个整数,依次存放到一向量 a 中,例如:423 放在 a(1),156 放在 a(2),…。统计共有多少个整数,并输出这些数。clear;str=( 请输入一个字符串: , s );len=length(str);i=0; %a 向量的下标num=0; %统计整数的个数flag=0; %标志位,为 1 代表出现数字,为 0 代表出现非数字字符s=0; %存放出现的一个个整数for j=1:lench=str(j);if (ch>= 0 i=k;endif (aver(k),则输出 24833)将该数字字符串中的所有偶数数字字符删除。clear;str=( 请输入一行数字字符(用回车结束) , s );%第 1 小题a1=str;k=a1== ;a1(k)=[];a1=sort(a1); %对 a1 中的各数字字符排序len=length(a1);i=1;while (i+24||a~=fix(a)||a>num %如果用户输入的数大于 4 或小于 1 或为小数或大于剩余的火柴根数,重新输入a=( 您输入的数据格式不对,请重新输入: );endnum=num-a;if num==0disp( 您输了!谢谢您的参与!! );break;enddisp([ 现在还剩 ,num2str(num), 根火柴; ]);b=5-a; %计算机取的火柴数disp([ 计算机取 ,num2str(b), 根火柴; ]);num=num-b; end试题 14:自动发牌:一副扑克有 52 张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用 S(Spaces)表示;红桃用 H(Hearts)表示;方块用D(Diamonds)表示;梅花用 C(Clubs)表示。clear;clc;b=1:52; %表示一副扑克牌,1~13 表示黑桃 A~黑桃 K;14~26 表示红桃 A~红桃 K;依此类推a1=[]; %表示第 1 个人应得的牌,初始为空, 牌发完后,a1 应是一个包含 13 个元素的向量a2=[];a3=[];a4=[];num=0;while ~isempty(b)num=num+1;len=length(b);serial=fix(len*rand(1))+1; %产生一个 1~len 的随机数switch mod(num,4)case 1a1=[a1,b(serial)];case 2a2=[a2,b(serial)];case 3a3=[a3,b(serial)];case 0a4=[a4,b(serial)];endb(serial)=[];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值