看到两道小学数学题,实在是解不动,用js写了一下
把一个自然数的约数(除去它本身)按照从小到大的顺序写在它的左边,可以得到一个多位数,比如6的约数是1,2,3,写成一个多位数是1236,假如这个多位数中,没有直复数字,那么我们你这个多位数是唯一的。请问,从1-999中,有多少个唯一的多位数,(一位数不是多位数,不作考虑)
let total=0;
for(let i=1;i<=999;i++){
    let str='';
    for(let j=1;j<=i;j++){
        if(i%j===0){
            str+= ''+j;
        }
    }
    str=str.split('');
    let newStr=[...new Set(str)];
    if(str.length>1&&newStr.length===str.length){
        total++;
    }
}
console.log(total);//83
把1-6排成一排,然后把相邻两个数作差(大数减去小数),把这落差都加起来,最后结果是偶数的排法有种、(比如按照123465排,差就是11121,1+1+1-2+1=6,是偶数,就是一种满足条件的排法)
看错题目,以为1-6可以重复排列:
let total=0;
function b(str){
    let newStr='';
    for(let i=1;i<=6;i++){
        newStr=str+i;
        if(newStr.length<6){
            b(newStr);
        }else{
            let sum=0;
            for(let j=0;j<newStr.length-1;j++){
                sum+=newStr[j]>newStr[j+1]?newStr[j]-newStr[j+1]:newStr[j+1]-newStr[j];
            }
            if(sum%2===0){
                total++;
            }
        }
    }
}
b('')
console.log(total);//23328
正解如下:
let total=0;
const arr=[1,2,3,4,5,6];
function b(arr,newArr){
    for(let i=0;i<arr.length;i++){
        let tempArr=[...arr];
        let tempNewArr=[...newArr];
        tempNewArr=tempNewArr.concat(tempArr.splice(i,1));
        if(tempNewArr.length<6){
            b(tempArr,tempNewArr)
        }else{
            // console.log(tempNewArr);
            let sum=0;
            for(let j=0;j<tempNewArr.length-1;j++){
                sum+=tempNewArr[j]>tempNewArr[j+1]?tempNewArr[j]-tempNewArr[j+1]:tempNewArr[j+1]-tempNewArr[j];
            }
            if(sum%2===0){
                total++;
            }
        }
    }
}
b(arr,[]);
console.log(total);//288
虽然是小学的题目,现在确实也解不动了,算法很简单,但是在处理递归的时候还是出现了一些问题,让自己陷入泥潭。
其实自己之前写递归写得还是太少,递归确实很好用,但是很神秘,不好实现(主要还是写的太少)。经过反思,得出一个写递归的必要条件(算是一点点小的心得吧):当确定要使用递归时,先不要去考虑递归调用的问题,只考虑第一次的实现方式,先把第一次实现了,再去递归。
看到两道小学数学题,实在是解不动,用js写了一下的更多相关文章
- Java中创建String的两道面试题及详解
		
我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd"; String str2 = new String("abcd&qu ...
 - ACM/ICPC 之 两道dijkstra练习题(ZOJ1053(POJ1122)-ZOJ1053)
		
两道较为典型的单源最短路径问题,采用dijkstra解法 本来是四道练习题,后来发现后面两道用dijkstra来解的话总觉得有点冗余了,因此暂且分成三篇博客(本篇以及后两篇). ZOJ1053(POJ ...
 - 两道二分coming~
		
第一道:poj 1905Expanding Rods 题意:两道墙(距离L)之间架一根棒子,棒子受热会变长,弯曲,长度变化满足公式( s=(1+n*C)*L),求的是弯曲的高度h. 首先来看这个图: ...
 - leetcode简单题目两道(2)
		
Problem Given an integer, write a function to determine if it is a power of three. Follow up: Could ...
 - 『ACM C++』Virtual Judge | 两道基础题 - The Architect Omar && Malek and Summer Semester
		
这几天一直在宿舍跑PY模型,学校的ACM寒假集训我也没去成,来学校的时候已经18号了,突然加进去也就上一天然后排位赛了,没学什么就去打怕是要被虐成渣,今天开学前一天,看到最后有一场大的排位赛,就上去试 ...
 - js 从两道面试题加深理解闭包与箭头函数中的this
		
壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ...
 - 《Java面试全解析》1000道面试题大全详解(转)
		
<Java面试全解析>1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃 ...
 - 搞定ReentrantReadWriteLock 几道小小数学题就够了
		
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...
 - ACM/ICPC 之 欧拉回路两道(POJ1300-POJ1386)
		
两道有关欧拉回路的例题 POJ1300-Door Man //判定是否存在从某点到0点的欧拉回路 //Time:0Ms Memory:116K #include<iostream> #in ...
 
随机推荐
- mongoDB端口启动失败原因
			
删除以下文件: (所以数据会丢失,需要重新创建数据库)
 - 通过IP地址訪问Jbossserver上的应用
			
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/liu765023051/article/details/28882533 环境介绍 Web项目中.在 ...
 - Effective C++: 07模板与泛型编程
			
C++ template机制自身是一部完整的图灵机(Turing-complete):它可以被用来计算任何可计算的值.于是导出了模板元编程(TMP, template metaprogramming) ...
 - Linux终端常用命令(一)
			
基本操作 展示全部的环境变量 export 搜索可执行文件.源文件 whereis ls 在环境变量中搜索可执行文件,并打印完整路径 which ls 展示用户命令,系统调用.库函数等 whatis ...
 - 【JZOJ4876】【NOIP2016提高A组集训第10场11.8】基因突变
			
题目描述 邪恶的707刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类! 但是统治人类是很庞大且复杂的一个工程,707尝试了洗脑,催眠,以及武装镇压都没能成功地统治人类,于是她决定从科学上对人类 ...
 - iOS app 设计推荐
			
见微知著,谈移动缺省页设计 http://www.cocoachina.com/design/20150303/11186.html Facebook产品设计总监!设计APP时的14个必考题 http ...
 - jq 添加内容
			
向页面动态添加内容,一般用于动态网页,需要即时请求数据,并更新在页面上,使用append()更多一些,empty() - 清空所有子元素,remove() - 清除自身所有子元素. append() ...
 - SDUT-3343_数据结构实验之二叉树四:(先序中序)还原二叉树
			
数据结构实验之二叉树四:(先序中序)还原二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一棵二叉树的先序遍历 ...
 - 4818 Largest Empty Circle on a Segment (几何+二分)
			
ACM-ICPC Live Archive 挺水的一道题,直接二分圆的半径即可.1y~ 类似于以前半平面交求核的做法,假设半径已经知道,我们只需要求出线段周围哪些位置是不能放置圆心的即可.这样就转换为 ...
 - jieba中文分词源码分析(四)
			
一.未登录词问题在jieba中文分词的第一节曾提到未登录词问题 中文分词的难点 分词规范,词的定义还不明确 (<统计自然语言处理>宗成庆)歧义切分问题,交集型切分问题,多义组合型切分歧义等 ...