使用0到9十个数字,组成一个和值等式

时间:2021-05-13 18:54:45

-- Created on 2010/6/14 by DUQIANG

declare
--给你0,1,2,3...9共10个数字,组成一个等式,2个加数是3位数,和的各位数字,2个加数的各个位上的数字不可重复
-- Local variables here
i integer;
j integer;
n integer := 0;
type tt_t is table of number index by pls_integer;
v_tt tt_t;
v_tt2 tt_t;
begin

for i in 1 .. 1000 loop
--过滤不符合条件的数字,将满足的存到数组
if (trunc(i / 100) <> 1 and trunc(mod(i, 100) / 10) <> 1 and
mod(i, 10) <> 1 and trunc(i / 100) <> trunc(mod(i, 100) / 10) and
trunc(i / 100) <> mod(i, 10) and
trunc(mod(i, 100) / 10) <> mod(i, 10)) then
n := n + 1;
v_tt(n) := i;
end if;
end loop;
v_tt2 := v_tt; --数组整体复制

for i in v_tt.first .. v_tt.last loop
for j in v_tt2.first .. v_tt2.last loop

if (v_tt(i) + v_tt2(j) > 1000 and v_tt(i) + v_tt2(j) < 2000
--和的3位数字不等
and trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <>
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) and
trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <>
mod((v_tt(i) + v_tt2(j) - 1000), 10) and
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <>
mod((v_tt(i) + v_tt2(j) - 1000), 10)
--和的3位均不为1
and trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <> 1 and
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <> 1 and
mod((v_tt(i) + v_tt2(j) - 1000), 10) <> 1
--和的3位数字与2个加数的百位数字均不相等
and
trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <> trunc(v_tt(i) / 100) and
trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <> trunc(v_tt2(j) / 100) and
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <>
trunc(v_tt(i) / 100) and
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <>
trunc(v_tt2(j) / 100) and
mod((v_tt(i) + v_tt2(j) - 1000), 10) <> trunc(v_tt(i) / 100) and
mod((v_tt(i) + v_tt2(j) - 1000), 10) <> trunc(v_tt2(j) / 100)
--和的3位数字与2个加数的十位数字均不相等
and trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <>
trunc(mod(v_tt(i), 100) / 10) and trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <>
trunc(mod(v_tt2(j), 100) / 10) and
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <>
trunc(mod(v_tt(i), 100) / 10) and
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <>
trunc(mod(v_tt2(j), 100) / 10) and
mod((v_tt(i) + v_tt2(j) - 1000), 10) <>
trunc(mod(v_tt(i), 100) / 10) and
mod((v_tt(i) + v_tt2(j) - 1000), 10) <>
trunc(mod(v_tt2(j), 100) / 10)
--和的3位数字与2个加数的个位数字均不相等
and trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <> mod(v_tt(i), 10) and
trunc((v_tt(i) + v_tt2(j) - 1000) / 100) <> mod(v_tt2(j), 10) and
trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <>
mod(v_tt(i), 10) and trunc(mod((v_tt(i) + v_tt2(j) - 1000), 100) / 10) <>
mod(v_tt2(j), 10) and
mod((v_tt(i) + v_tt2(j) - 1000), 10) <> mod(v_tt(i), 10) and
mod((v_tt(i) + v_tt2(j) - 1000), 10) <> mod(v_tt2(j), 10)
--第一个因子的百位不等于第2个因子的各个位
and trunc(v_tt(i) / 100) <> trunc(v_tt2(j) / 100) and
trunc(v_tt(i) / 100) <> trunc(mod(v_tt2(j), 100) / 10) and
trunc(v_tt(i) / 100) <> mod(v_tt2(j), 10)
--第一个因子的十位不等于第2个因子的各个位
and trunc(mod(v_tt(i), 100) / 10) <> trunc(v_tt2(j) / 100) and
trunc(mod(v_tt(i), 100) / 10) <> trunc(mod(v_tt2(j), 100) / 10) and
trunc(mod(v_tt(i), 100) / 10) <> mod(v_tt2(j), 10)
--第一个因子的个位不等于第2个因子的各个位
and mod(v_tt(i), 10) <> trunc(v_tt2(j) / 100) and
mod(v_tt(i), 10) <> trunc(mod(v_tt2(j), 100) / 10) and
mod(v_tt(i), 10) <> mod(v_tt2(j), 10)) then
dbms_output.put_line(v_tt(i) || '+' || v_tt2(j) || '=' ||
to_char(v_tt(i) + v_tt2(j)));
end if;
end loop;
end loop;
end;


答案:

246+789=1035
249+786=1035
264+789=1053
269+784=1053
284+769=1053
286+749=1035
289+746=1035
289+764=1053
324+765=1089
325+764=1089
342+756=1098
346+752=1098
347+859=1206
349+857=1206
352+746=1098
356+742=1098
357+849=1206
359+847=1206
364+725=1089
365+724=1089
423+675=1098
425+673=1098
426+879=1305
429+876=1305
432+657=1089
437+589=1026
437+652=1089
439+587=1026
452+637=1089
457+632=1089
473+589=1062
473+625=1098
475+623=1098
476+829=1305
479+583=1062
479+826=1305
483+579=1062
487+539=1026
489+537=1026
489+573=1062
537+489=1026
539+487=1026
573+489=1062
579+483=1062
583+479=1062
587+439=1026
589+437=1026
589+473=1062
623+475=1098
624+879=1503
625+473=1098
629+874=1503
632+457=1089
637+452=1089
652+437=1089
657+432=1089
673+425=1098
674+829=1503
675+423=1098
679+824=1503
724+365=1089
725+364=1089
742+356=1098
743+859=1602
746+289=1035
746+352=1098
749+286=1035
749+853=1602
752+346=1098
753+849=1602
756+342=1098
759+843=1602
764+289=1053
764+325=1089
765+324=1089
769+284=1053
784+269=1053
786+249=1035
789+246=1035
789+264=1053
824+679=1503
826+479=1305
829+476=1305
829+674=1503
843+759=1602
847+359=1206
849+357=1206
849+753=1602
853+749=1602
857+349=1206
859+347=1206
859+743=1602
874+629=1503
876+429=1305
879+426=1305
879+624=1503