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

-- 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值