matlab回文数,用Matlab求水花数-完美数-回文数和亲合数.doc

用Matlab求水花数-完美数-回文数和亲合数

PAGE

关于一些特殊自然数的研究

PAGE \* MERGEFORMAT 1

题目:对深圳市人口及医疗的预测

编号: 10055

队长 李 荣

姓名: 李 荣

王 遂

李春晓

1.水仙花数:

(1)题目

若一个三位数自然数的各位数的各位数字的立方和等于该数本身,则称该数为水仙花数,例如,153=1^3+5^3+3^3,所以153为水仙花数,编程计算所有水仙花数.

(2)分析问题:

本题特点在于一个数的各个位数立方和与其本身的关系很明确且很简单,可以用if语句或find语句来完成.如果用if语句,则又有两种选择:1.命一个三位数,再表示其各个位数的数字;2.命各个位数的数字,再表示该三位数.如果用find语句,其思路与if语句类似.

(3)问题求解:

方法一:

for x=100:1:999

a=fix(x/100);

b=fix(x/10-10*a);

c=x-100*a-10*b;

if x==a^3+b^3+c^3

x

end

end

方法二:

for x=1:1:9

for y=0:1:9

for z=0:1:9

if x^3+y^3+z^3==100*x+10*y+z

m=100*x+10*y+z

end

end

end

end

方法三:

shui=100:999;

i=floor(shui/100);

j=floor(mod(shui,100)/10);

k=floor(mod(shui,10));

p=i.^3+j.^3+k.^3;

shui(find(p==shui))

(4)结论及分析:

通过实验,结果正确,证明分析无误.

(5)结果:

153 370 371 407

2.回文数

(1)题目:

对于一个自然数,若将各位数字倒序排出,加到原数字上,反复多次,若能得到一个从左到右读和从有到左读完全一样的数,则称该自然数能产生回文数.通过编程计算,你能找出多少个能产生回文数的数,又能找到多少不能产生回文数的数,二者的最小数是多少?

(2)分析问题:

本题关键在于如何将一个数的各个数位的数字倒序排出,并加到原数上.又由题目知必然要用到循环语句.

(3)假设:

由于将一个数的各个数位的数字倒序排出,并不断加到原数上比较困难,我们假设该数为四位数并假设倒序排出加到原数得到的新数不超过10000,于是有了下面的简单程序

for a=0:9;

for b=0:9;

for c=0:9;

for d=0:9;

x=1000*a+100*b+10*c+d;

while x<10000;

if a==d&b==c;

x=x;

else

x=x+1000*d+100*c+10*b+a;

end

end

end

end

x

end

end

实际操作时,我们发现:该程序不仅具有假设中的缺陷,而且在实际操作中运行速度很慢,无法得到结果,所以必须将方法优化。后来我们使用取余和取整操作,借助循环语句while,得出如下程序,突破了本题的关键。

for a=1:100

b=0;

c=0;

x=a;

while x>=10

b=mod(x,10);

x=fix(x/10);

c=10*c+b;

end

c=10*c+x;

此程序实现了一个数的倒序操作,并不用考虑位数问题.

(4)问题求解:

for a=1:100

c=0;

x=a;

while x>=10

b=mod(x,10);

x=fix(x/10);

c=10*c+b;

end

c=10*c+x;

A=a+c;

B=0;

y=A;

while y>=10

C=mod(y,10);

y=fix(y/10);

B=10*B+C;

end

B=10*B+y

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值