- 注册时间
- 2008-11-26
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 149497
- 在线时间
- 小时
|
发表于 2012-6-18 13:50:53
|
显示全部楼层
- (*问题:小学奥数求助*)
- (*问题地址:http://bbs.emath.ac.cn/thread-4262-1-1.html*)
- (*此代码参考了wayne:http://bbs.emath.ac.cn/viewthread.php?tid=4262&page=2&fromuid=865#pid42880*)
- (*利用穷举法解决问题,使用排列穷举的办法*)
- Clear["Global`*"];(*Clear all variables*)
- d=Range[9];(*生成{1,2,3,4,5,6,7,8,9}*)
- (*建立子函数,对于满足条件的结果返回1,不满足条件的结果返回0*)
- subFun[a0_]:=Module[{a=a0[[1;;2]],(*第1个整数的各个数字*)
- b=a0[[3;;5]],(*第2个整数的各个数字*)
- c,(*局部变量*)
- out},(*局部变量*)
- (*由第1个整数与第2个整数得到第3个整数的各位数*)
- c=IntegerDigits[FromDigits[a]*FromDigits[b]];
- (*注意d是全局变量,这并不是一个好的编程习惯*)
- If[Sort@Flatten[{a,b,c}]==d,(*a\b\c三个整数各位数组成一个表,并排序*)
- out=1,(*如果满足条件out=1*)
- out=0];(*如果不满足out=0*)
- out];(*输出最后的结果*)
- (*根据子函数,选择所有满足条件的结果*)
- Select[Permutations[d, {5}],subFun[#]==1&]
复制代码 注意下面的代码与上面的代码的结果的区别- (*问题:小学奥数求助*)
- (*问题地址:http://bbs.emath.ac.cn/thread-4262-1-1.html*)
- (*此代码参考了wayne:http://bbs.emath.ac.cn/viewthread.php?tid=4262&page=2&fromuid=865#pid42880*)
- (*利用穷举法解决问题,使用排列穷举的办法*)
- Clear["Global`*"];(*Clear all variables*)
- d=Range[9];(*生成{1,2,3,4,5,6,7,8,9}*)
- subFun[a0_]:=Module[{a=a0[[1;;2]],(*第1个整数的各个数字*)
- b=a0[[3;;5]],(*第2个整数的各个数字*)
- c,(*局部变量*)
- out},(*局部变量*)
- (*由第1个整数与第2个整数得到第3个整数的各位数*)
- c=IntegerDigits[FromDigits[a]*FromDigits[b]];
- (*注意d是全局变量,这并不是一个好的编程习惯*)
- If[Union[a,b,c]==d,(*a\b\c三个整数各位数组成一个表,并排序*)
- out=1,(*如果满足条件out=1*)
- out=0];(*如果不满足out=0*)
- out];(*输出最后的结果*)
- (*根据子函数,选择所有满足条件的结果*)
- Select[Permutations[d, {5}],subFun[#]==1&]
复制代码 |
-
-
|