作业帮 > 综合 > 作业

matlab 2到100整数怎样写成多个连续整数的和

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 05:07:10
matlab 2到100整数怎样写成多个连续整数的和
如:6=1+2+3;15=1+2+3+4+5;或15=4+5+6;或15=7+8;最好有注释啊
这题的理解有点难度.不理解,写了也看不懂;理解了,很容易编好.
1、以95为例.
连续自然数的和写成乘积的形式就是(N-M+1)*(M+N)/2,其中M、N分别代表这一串数中的第一个和最后一个.
若(N-M+1)*(M+N)/2=95,则(N-M+1)*(M+N)=190
M+N和N-M+1均是190的约数(1、2、5、10、19、38、95、190).
列出方程组:
M+N=190,N-M+1=1(这样解出来就是一个95,舍去)
M+N=95,N-M+1=2,可以解出N=48,M=47
M+N=38,N-M+1=5,可以解出来N=21,M=17
M+N=10,N-M+1=19,解出N=14,M=5
因为M、N都是正整数,所以M+N一定大于等于N-M+1,另外四个方程就可以不列了.
这样一共可以解出M=47,N=48(47~48);M=17,N=21(17~21);M=5,N=14(5~14)三组答案.
因此95=47+48;或95=17+18+19+20+21;或95=5+6+...+14
2、设计思路.
(1)任一数,找出它的约数;
(2 )二元一次方程解
理解了之后,设计起来不难.
3、这里给出一个穷举法的小程序也能解决问题.也以95为例
clear all
clc
a=95
for k=2:a
sum=0;
for i=1:a;
sum=0;
for j=i:i+k-1
sum=sum+j;
end
if sum==a
fprintf('连续%d个正整数',k)
disp(i:i+k-1)
end
end
end
输出
a=95
连续2个正整数 47 48
连续5个正整数 17 18 19 20 21
连续10个正整数 5 6 7 8 9 10 11 12 13 14
再问: 我如果把a=95改为for a=2:100好像也可以,但就像下面一样,感觉冗杂,怎样每个和之前插入a=数字,本人matlab新手 连续2个正整数 1 2 连续2个正整数 2 3 连续3个正整数 1 2 3 连续2个正整数 3 4 连续2个正整数 4 5 连续3个正整数 2 3 4 连续4个正整数 1 2 3 4 连续2个正整数 5 6 连续3个正整数 3 4 5
再答: 因为a=2:100,a变成了向量,改下就行了。 clear all clc for a=2:100 for k=2:a sum=0; for i=1:a; sum=0; for j=i:i+k-1 sum=sum+j; end if sum==a fprintf('连续%d个正整数',k) disp(i:i+k-1) end end end end %a