4、找数
4、找数
由键盘输入正整数N(N≤500)和K(K≤9),请找一个正整数M,使N×M的值仅由0~K组成,而且0~K的每个数字至少出现一次。编程序在1~30000范围内找出符合条件的最小的M值,如果找不到,则输出“No find!”。
例:①输入:N,K=65,3
输出:M=48 (因为65×48=3120)
②输入:N,K=125,8
输出:No find!
program findm;
const max = 30000;
var
n, m, k, i, min, s : longint;
NoFind : boolean;
t : array[0 .. 9] of integer;
begin
write('N, K = ');
readln(n, k);
min := 10;
for i := 2 to k do
min := min*10+i;
NoFind := true;
for m := (min div n) to max do
begin
s := m*n;
while s > 0 do
begin
t[s mod 10] := t[s mod 10] + 1;
s := s div 10;
end;
NoFind := false;
for i := 0 to 9 do
if ((i <= k) and (t[i] = 0)) or ((i > k) and (t[i] <> 0)) then
begin
NoFind := true;
break;
end;
if NoFind then
for i := 0 to 9 do
t[i] := 0
else
break;
end;
if Nofind then
writeln('No find!')
else
writeln('M = ', m, ' N*M = ', n*m);
readln;
end.
由键盘输入正整数N(N≤500)和K(K≤9),请找一个正整数M,使N×M的值仅由0~K组成,而且0~K的每个数字至少出现一次。编程序在1~30000范围内找出符合条件的最小的M值,如果找不到,则输出“No find!”。
例:①输入:N,K=65,3
输出:M=48 (因为65×48=3120)
②输入:N,K=125,8
输出:No find!
program findm;
const max = 30000;
var
n, m, k, i, min, s : longint;
NoFind : boolean;
t : array[0 .. 9] of integer;
begin
write('N, K = ');
readln(n, k);
min := 10;
for i := 2 to k do
min := min*10+i;
NoFind := true;
for m := (min div n) to max do
begin
s := m*n;
while s > 0 do
begin
t[s mod 10] := t[s mod 10] + 1;
s := s div 10;
end;
NoFind := false;
for i := 0 to 9 do
if ((i <= k) and (t[i] = 0)) or ((i > k) and (t[i] <> 0)) then
begin
NoFind := true;
break;
end;
if NoFind then
for i := 0 to 9 do
t[i] := 0
else
break;
end;
if Nofind then
writeln('No find!')
else
writeln('M = ', m, ' N*M = ', n*m);
readln;
end.


浙公网安备 33010602011771号