用pascal求一个数,这个数是11的倍数,百位数加十位数等于千位数,并且百位数加十位数是完全平方数.

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 18:01:23

用pascal求一个数,这个数是11的倍数,百位数加十位数等于千位数,并且百位数加十位数是完全平方数.
用pascal求一个数,这个数是11的倍数,百位数加十位数等于千位数,并且百位数加十位数是完全平方数.

用pascal求一个数,这个数是11的倍数,百位数加十位数等于千位数,并且百位数加十位数是完全平方数.
这不难
var
i:integer;
begin
for i:=1000 to 9999 do
begin
if (i mod 11=0) and ((i div 1000)=(i mod 1000 div 100)+(i mod 100 div 10)) and (sqrt(i mod 100 div 10+i mod 1000 div 100)=trunc(sqrt(i mod 100 div 10+i mod 1000 div 100))) then write(i,' ');
end;
end.
结果:1012 1100 4048 4136 4224 4312 4400 9097 9185 9273 9361 9548 9636 9724 9812 9900

4,5,8 12,16,24 15,30,60 14,28,42 就这四个数组没过直接给答案或者给程序也行。 1 40 4 48 15 60 14 84 需要源程序再通知我

楼上正解。
不过完全可以优化一下:
1)这个数为11的倍数,所以可以从1001开始,每次加11。这样可以减少判断次数。
2)百位数加十位数等于千位数,并且百位数加十位数是完全平方数。所以千位数只能是1、4、9。可以进一步缩小搜索的范围。
var
i:integer;
begin
i:=1001;
while i <= 19...

全部展开

楼上正解。
不过完全可以优化一下:
1)这个数为11的倍数,所以可以从1001开始,每次加11。这样可以减少判断次数。
2)百位数加十位数等于千位数,并且百位数加十位数是完全平方数。所以千位数只能是1、4、9。可以进一步缩小搜索的范围。
var
i:integer;
begin
i:=1001;
while i <= 1991 do
begin
if (i div 1000)=(i mod 1000 div 100)+(i mod 100 div 10) then write(i,' ');
i := i + 11;
end;
i:=4004;
while i <= 4994 do
begin
if (i div 1000)=(i mod 1000 div 100)+(i mod 100 div 10) then write(i,' ');
i := i + 11;
end;
i:=9009;
while i <= 9999 do
begin
if (i div 1000)=(i mod 1000 div 100)+(i mod 100 div 10) then write(i,' ');
i := i + 11;
end;
end.

收起