2016东莞市特长生考试 子数整数
Time Limit:10000MS Memory Limit:256000K
Total Submit:4 Accepted:3
Case Time Limit:1000MS
Description
对于一个五位数 a1a2a3a4a5,可将其拆分为三个子数: sub1=a1a2a3
sub2=a2a3a4
sub3=a3a4a5
例如,五位数 20207 可以拆分成 sub1=202
sub2=020(=20) sub3=207
现在给定一个正整数 K,要求你编程求出 10000(包括 10000)到 30000(包括 30000)之间所有满足下述条件的五位数,条件是这些五位数的三个子数 sub1,sub2,sub3 都可被 K 整除。
Input
从文件 num.in 输入,输入仅一行,为正整数 K(0<k<1000)。< font="">
Output
输出到文件 num.out,输出文件的每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出“-1”。
分析:标记1000以内k的倍数然后枚举判断就行了。
代码
const
maxn=1000;
var
f:array[0..maxn] of boolean;
i,j,k,n:longint;
fl:boolean;
function check(x:longint):boolean;
var
s,st:string;
p:longint;
begin
check:=true;
str(x,s);
st:=s[1]+s[2]+s[3];
val(st,p);
if not f[p] then exit(false);
st:=s[2]+s[3]+s[4];
val(st,p);
if not f[p] then exit(false);
st:=s[3]+s[4]+s[5];
val(st,p);
if not f[p] then exit(false);
end;
begin
//assign(input,'num.in');reset(input);
//assign(output,'num.out');rewrite(output);
readln(n);
k:=n;
f[0]:=true;
while k<1000 do
begin
f[k]:=true;
k:=k+n;
end;
for i:=10000 to 30000 do
if check(i) then
begin
writeln(i);
fl:=true;
end;
if not fl then writeln(-1);
//close(input);close(output);
end.