pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数字组成,这个数是多少?

用pascal啊!大家帮下啦!
祝开心~
答案我知道啊,我要的是怎么用pascal编!过程!~
再次感谢!~
开心~

第1个回答  2008-07-27
先分析一下,判断上线,一个数是六位数,而且还是被六乘过的,那么你就可以想这个数是谁??计算机结果是166666.5,我们就取166667
好了,现在判断下线,下线是100000,这个不用说都知道吧。好了,下面就是思路:
1.循环出数。
2.把原数字分离导入数组并排序。
3。判断各个倍数。
4.输出结果
以上是一级算法;其中2需要求精;
1,通过数组个字符串的处理可以分离数;
2,通过一个变量导入数;
3,分离数的每一位,导入数组并排序;
4,比较每一位(用循环来做),如果成功,输出结果,否则continue(继续);
好了,用这个算法去算吧,很简单的,不过就是麻烦了点,其实还可以优化一下,但是由于原因就不写了,也是循环,就是数量级小了一点,也可以优化速度,但这个排序如果用冒泡,会浪费时间,如果用快排就差不多,不过估计还是要超一秒。
第2个回答  2008-07-26
算法:一般来说可以直接暴力枚举出来,1s内是可以完成的,但是这里有一些可以剪枝。比如说这个数第一位肯定是1,因为166667*6=10000002已经是七位数了。所以只要从100000搜到166666就可以了,所以这个可以用非常白痴的方法来做:把这个数的2、3、4、5、6倍的每一位提取出来排个序(选泽排序比较简单),如果一样就break掉,不一样就再搜。
思路出来,代码就不难写了吧。这里就不再说了。
第3个回答  2008-07-31
var
i,j:longint;
m,n:integer;
a,b:array[1..6] of integer;
function Estimation1(i:longint):boolean;
var
r:integer;
begin
Estimation1:=false;
for r:=2 to 6 do
if ((i*r) div 100000<1) or ((i*r) div 100000>9)then exit;
Estimation1=true;
end;
function Estimation2(i:longint):boolean;
var
k,l,c,t,p:integer;
begin
k:=7;
repeat
k:=k-1;
a[k]:=i mod 10;
i:=i div 10;
until i dvi 10<1;
for l:=2 to 6 do
begin
k:=7;
i:=i*l;
repeat
k:=k-1;
b[k]:=i mod 10;
i:=i div 10;
until i dvi 10<1;
p:=0;
for c:=1 to 6 do
for t:=1 to 6 do
if a[c]=b[t] then p:=p+1;
if (p div 2)<>6 then exit;
end;
Estimation2:=true;
end;
begin
for i:=100000 to 999999 do
begin
if Estimation1(i) then Estimation2(i);
if Estimation2(i) then writeln(i);
end;
end.本回答被提问者采纳
第4个回答  2008-07-27
begin{main}
for i:=100000 to 166666 do
begin
a1:=i;
chaifen(a1);{编一个过程,把数拆分开来,放在一个集合里}
a2:=i*2;
chaifen(a2);{把它的两倍拆分出来}
for j:=1 to 6 do
if not(b[j] in s) then break;{判断是否都在集合中,有一个不是就结束循环}
{其他倍数的跟2倍的一样,重复写或过程调用即可}
end;
end.
第5个回答  2008-07-25
142857 啦!

142857
285714
428571
571428
714285
857142
相似回答