算法-算法:两个三位数相加得到一个四位数
两个三位数相加得到一个四位数,并且这三个数字的每一位都不相同,输出这样的算式,例如。(就是要把0-9这10个数全用上):
354+908=1262;
304+968=1272;
求高效的算法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
两个三位数相加得到一个四位数,并且这三个数字的每一位都不相同,输出这样的算式,例如。(就是要把0-9这10个数全用上):
354+908=1262;
304+968=1272;
求高效的算法。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
参考下百度知道:
http://wenwen.soso.com/z/q224244606.htm
虽然百度还不知道你得问题的答案,但是思路很有-意思,值得参考下。
我记得有一个算法,DFS,应该可以做到..可以类比下素数环..只是条件不同而已..
我说下我的思路吧,代码我就没时间打了:
主要的方法还是用高中老师在讲排列组合时,所用到的插空法:
第一步:用插空法获取可能的组合,例:
要获取四个数可以记作111111,那么就有6个空位,7个空格,计一个空格为0,那么可以:
0110110101 就是1,2,4,5,7,9
也可以: 0000111111 就是4,5,6,7,8,9
由此可以快速的得到在10个数中取6个数所有的可能,总共有C(10,6)个
第二步:将获得的6个数存放在数组中记作数组a
第三步:由于插空法得到的数列特点是一个有序数列,所以只需判断a[0]+a[5]是否等于或大于10,如果是10就捕获该数组,如果不是则放弃捕获该数组。
第四步:将得到的数组a首尾相加直到小于10,计能获得n组相加大于或等于10的组合,那么这个数组中所能得到的组合应是2nA(4,4)个,将结果输出。