pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数字组成,这个数是多少?祝开心~我要的是怎么用pascal编!开心~
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 23:30:23
![pascal:一个6位数的2,3,4,5,6倍仍然是6位数,而且它们都由原数的6个数字组成,这个数是多少?祝开心~我要的是怎么用pascal编!开心~](/uploads/image/z/640325-29-5.jpg?t=pascal%3A%E4%B8%80%E4%B8%AA6%E4%BD%8D%E6%95%B0%E7%9A%842%2C3%2C4%2C5%2C6%E5%80%8D%E4%BB%8D%E7%84%B6%E6%98%AF6%E4%BD%8D%E6%95%B0%2C%E8%80%8C%E4%B8%94%E5%AE%83%E4%BB%AC%E9%83%BD%E7%94%B1%E5%8E%9F%E6%95%B0%E7%9A%846%E4%B8%AA%E6%95%B0%E5%AD%97%E7%BB%84%E6%88%90%2C%E8%BF%99%E4%B8%AA%E6%95%B0%E6%98%AF%E5%A4%9A%E5%B0%91%3F%E7%A5%9D%E5%BC%80%E5%BF%83%7E%E6%88%91%E8%A6%81%E7%9A%84%E6%98%AF%E6%80%8E%E4%B9%88%E7%94%A8pascal%E7%BC%96%21%E5%BC%80%E5%BF%83%7E)
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