求教!输出和为100的连续数的算法
1个回答

如果用程序:(delphi语言)算法应该是看得懂的.

var

i,j,k integer;

a:string;

begin

for i := 1 to 50 do begin

a:=inttostr(i);

for j:=i+1 to 50 do begin

k:=i+j;

a:=a+','+inttostr(j);

if k=100 then begin

showmessage(a);//可以定义一个字符串数组,每次赋这个字符串给数组.

break;//跳出内循环

end;

if k>100 then begin

break;//跳出内循环

end;

end;

end;

end;

根据位数来算

1+2 = 3 + 2*n =100 n整数,不成立

1+2+3 =6 +3*n =100 n整数,不成立

1+2+3+4 =10 +4*n =100 n整数,不成立

1+2+3+4+5 =15 +5*n =100 n=17 成立 这组整数为18,19,20,21,22

1+2+3+4+5+6=21 +6n =100 n整数,不成立

1+2+3+4+5+6+7 =28 +7n =100 n整数,不成立

1+2+3+4+5+6+7 +8 = 36+8n =100 n =8 成立 这组数为9-16的连续整数

1+2+3+4+5+6+7 +8+9=45+9n =100 n整数,不成立

1+2+3+4+5+6+7 +8+9+10 =55 +10n =100 n整数,不成立

1+2+3+4+5+6+7 +8+9+10 +11 = 66+11n =100 n整数,不成立

1+2+3+4+5+6+7 +8+9+10 +11 +12=78+12n =100 n整数,不成立

1+2+3+4+5+6+7 +8+9+10 +11 +12+13=91+13n =100 n整数,不成立

后面就没有可能了 .根据这个算法也可以写出一个循环代码,比上面的更简单.

k:=0;

m:=0;

for i:= 2 to 13 do begin

for j:=1 to i do begin

k:=k+j;

end;

k:=100-k;

m:=k mod i;

if m= 0 then

showmessage(inttostr(round(k/i)+1)+'--'+inttostr(round(k/i)+i));

end;