整个算法题。

peng2739956 2017-03-18 10:53:07
请原谅我的数学实在有点差劲,表弟给我提个算法题,然后我搞了好久没搞出来,请教各位算法大神了。、
题目:
1~9,9个数字均出现一次且仅出现一次,[ ][ ]*[ ]+[ ][ ][ ]/[ ]-[ ][ ]=0;且被除数和被乘数不能为1
...全文
418 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpjshiwo77 2017-03-20
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:

为什么不算算法?这不就是排列组合的实际应用么?没有用到递归算法和分治的思想?

下面是我用js写的:

var arrangement = function(){
var self = this;
var arr = [1,2,3,4,5,6,7,8,9];
self.result = [];

// 计算的方法
self.count = function(k,m){
if(k == m){
var item = [];
for (var i = 0; i <= m; i++) {
item.push(arr[i]);
};
var num = (item[0] * 10 + item[1])*item[2] + (item[3] * 100 + item[4] * 10 + item[5]) / item[6] - (item[7] * 10 + item[8]);
if(num == 0 && item[2] != 1 && item[6] !=1) {
var formula = (item[0] * 10 + item[1])+"*"+item[2]+"+"+(item[3] * 100 + item[4] * 10 + item[5])+"/"+item[6]+"-"+(item[7] * 10 + item[8]);
self.result.push(formula);
}
}
else{
for (var i = k; i <= m; i++) {
// if(arr[k] == 1 && (i == 2 || i == 6)){ //想减少计算次数,但导致了结果错误
// continue;
// }
// else{
self.swap(k,i);
self.count(k+1,m);
self.swap(k,i);
// }
};
}
}//end fun

// 交换数组两个元素的方法
self.swap = function(a,b){
var item = arr[a];
arr.splice(a,1,arr[b]);
arr.splice(b,1,item);
}//end func
}//end func

var MyArrangement = new arrangement();
MyArrangement.count(0,8);
console.log(MyArrangement.result);


结果:


参考:
http://blog.csdn.net/deepmindman/article/details/52264007
http://blog.csdn.net/todototry/article/details/1403807

因为我也是个新手,所以本想通过判断来减少计算次数,但导致计算结果错误,还请高手指教~

再说一下层主,每次回答别人的问题大部分都是带着批评的语气回答的,很少有实质的答案!都说这样不好,那样不好,要去看什么什么,学什么什么,会让人很不爽好吗?人家来问问题,本来就是想找到到解决方法。而不是你感觉的“授人予渔”,你的“授人予渔”感觉就是告诉别人“大海里有鱼,你去那抓吧!”
peng2739956 2017-03-20
  • 打赏
  • 举报
回复
嘿嘿,我就知道 总有无聊的人的
丰云 2017-03-20
  • 打赏
  • 举报
回复
被乘数不能为1。。。没注意啊。。。那只有三个答案了。。。
丰云 2017-03-20
  • 打赏
  • 举报
回复
我也是够无聊的。。。。

        var re = []
        var cp = function (l) {
            var e = l[0] + '' + l[1] + '*' + l[2] + '+' + l[3] + '' + l[4] + '' + l[5] + '/' + l[6] + '-' + l[7] + '' + l[8];
            if (l[6] != 1 && eval(e) == 0) {
                re.push(e);
            }
        }
        //网上找的全排列算法
        function fullSort(arr) {
            var result = [];
            if (arr.length == 1) {
                if(arr[0] + arr)
                result.push(arr);
                return result;
            }
            for (var i = 0; i < arr.length; i++) {
                var temp = [];
                temp.push(arr[i]);
                var remain = arr.slice(0);
                remain.splice(i, 1); 
                var temp2 = fullSort(remain).concat(); 
                for (var j = 0; j < temp2.length; j++) {
                    temp2[j].unshift(temp[0]); 
                    result.push(temp2[j]);
                }
            }
            return result;
        }
        var s = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        var r = fullSort(s);
        for (var i = 0; i < r.length; i++) {
            cp(r[i]);
        }
        console.log(re);
/* 共11个答案
12*4+376/8-95
17*3+258/6-94
23*1+468/9-75
26*1+483/7-95
27*1+536/8-94
35*2+168/7-94
36*1+472/8-95
45*1+376/8-92
46*1+259/7-83
58*1+234/6-97
63*1+245/7-98
*/
正怒月神 版主 2017-03-20
  • 打赏
  • 举报
回复
典型的排列组合算法
丰云 2017-03-20
  • 打赏
  • 举报
回复
勉强算是个算法题吧,1到9数字全排列,放到九个空位里进行运算,答案是0且满足题目限制的就是结果了, 这个方法很笨,但很容易理解
ying1234 2017-03-18
  • 打赏
  • 举报
回复
估计楼主表弟出的趣味题吧,应该不是算法题。
ying1234 2017-03-18
  • 打赏
  • 举报
回复
12*3+180/9-56 =0
  • 打赏
  • 举报
回复
你说的算法就是加减乘除四则运算的意思啊?那你还是一个一个数字去试吧。 如果想学计算方法或者数据结构算法,那么买一本数据结构教程看。你贴的这个跟算法根本不沾边儿。
  • 打赏
  • 举报
回复
“算法”是什么意思啊?
ying1234 2017-03-18
  • 打赏
  • 举报
回复
错了,2重复了。
ying1234 2017-03-18
  • 打赏
  • 举报
回复
看了一下,算出一个, 2*4+261/9-37
  • 打赏
  • 举报
回复
这个题目很简单啊,1到9任意排序组合,然后依次填充测试,所以换成算法问题就是组合算法
大鱼> 2017-03-18
  • 打赏
  • 举报
回复

这个是对的,上个没有考虑TM的整除
大鱼> 2017-03-18
  • 打赏
  • 举报
回复

就我闲的蛋疼
peng2739956 2017-03-18
  • 打赏
  • 举报
回复
引用 5 楼 ying1234 的回复:
12*3+180/9-56 =0
1重复了啊
peng2739956 2017-03-18
  • 打赏
  • 举报
回复
我说的算法题,跟编程的算法 不是一个概念,我只是想着,我居然被一个3年级的算法题给打败了

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧