pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数字组成,这个数是多少?祝开心~我要的是怎么用pascal编!开心~
pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数字组成,这个数是多少?祝开心~我要的是怎么用pascal编!开心~
pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数字组成,这个数是多少?
祝开心~
我要的是怎么用pascal编!
开心~
pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数字组成,这个数是多少?祝开心~我要的是怎么用pascal编!开心~
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 1000009)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
算法:一般来说可以直接暴力枚举出来,1s内是可以完成的,但是这里有一些可以剪枝。比如说这个数第一位肯定是1,因为166667*6=10000002已经是七位数了。所以只要从100000搜到166666就可以了,所以这个可以用非常白痴的方法来做:把这个数的2、3、4、5、6倍的每一位提取出来排个序(选泽排序比较简单),如果一样就break掉,不一样就再搜。
思路出来,代码就不难写了吧。这里就...
全部展开
算法:一般来说可以直接暴力枚举出来,1s内是可以完成的,但是这里有一些可以剪枝。比如说这个数第一位肯定是1,因为166667*6=10000002已经是七位数了。所以只要从100000搜到166666就可以了,所以这个可以用非常白痴的方法来做:把这个数的2、3、4、5、6倍的每一位提取出来排个序(选泽排序比较简单),如果一样就break掉,不一样就再搜。
思路出来,代码就不难写了吧。这里就不再说了。
收起
先分析一下,判断上线,一个数是六位数,而且还是被六乘过的,那么你就可以想这个数是谁??计算机结果是166666.5,我们就取166667
好了,现在判断下线,下线是100000,这个不用说都知道吧。好了,下面就是思路:
1.循环出数。
2.把原数字分离导入数组并排序。
3。判断各个倍数。
4.输出结果
以上是一级算法;其中2需要求精;
1,通...
全部展开
先分析一下,判断上线,一个数是六位数,而且还是被六乘过的,那么你就可以想这个数是谁??计算机结果是166666.5,我们就取166667
好了,现在判断下线,下线是100000,这个不用说都知道吧。好了,下面就是思路:
1.循环出数。
2.把原数字分离导入数组并排序。
3。判断各个倍数。
4.输出结果
以上是一级算法;其中2需要求精;
1,通过数组个字符串的处理可以分离数;
2,通过一个变量导入数;
3,分离数的每一位,导入数组并排序;
4,比较每一位(用循环来做),如果成功,输出结果,否则continue(继续);
好了,用这个算法去算吧,很简单的,不过就是麻烦了点,其实还可以优化一下,但是由于原因就不写了,也是循环,就是数量级小了一点,也可以优化速度,但这个排序如果用冒泡,会浪费时间,如果用快排就差不多,不过估计还是要超一秒。
收起
begin{main}
for i:=100000 to 166666 do
begin
a1:=i;
chaifen(a1);{编一个过程,把数拆分开来,放在一个集合里}
a2:=i*2;
chaifen(a2);{把它的两倍拆分出来}
for j:=1 to 6 d...
全部展开
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.
收起
用穷举啦,其实很简单
暴力枚举
142857 啦!
142857
285714
428571
571428
714285
857142