把一个自然数的约数(除去它本身)按照从小到大的顺序写在它的左边,可以得到一个多位数,比如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写了一下的更多相关文章

  1. Java中创建String的两道面试题及详解

    我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd"; String str2 = new String("abcd&qu ...

  2. ACM/ICPC 之 两道dijkstra练习题(ZOJ1053(POJ1122)-ZOJ1053)

    两道较为典型的单源最短路径问题,采用dijkstra解法 本来是四道练习题,后来发现后面两道用dijkstra来解的话总觉得有点冗余了,因此暂且分成三篇博客(本篇以及后两篇). ZOJ1053(POJ ...

  3. 两道二分coming~

    第一道:poj 1905Expanding Rods 题意:两道墙(距离L)之间架一根棒子,棒子受热会变长,弯曲,长度变化满足公式( s=(1+n*C)*L),求的是弯曲的高度h. 首先来看这个图: ...

  4. leetcode简单题目两道(2)

    Problem Given an integer, write a function to determine if it is a power of three. Follow up: Could ...

  5. 『ACM C++』Virtual Judge | 两道基础题 - The Architect Omar && Malek and Summer Semester

    这几天一直在宿舍跑PY模型,学校的ACM寒假集训我也没去成,来学校的时候已经18号了,突然加进去也就上一天然后排位赛了,没学什么就去打怕是要被虐成渣,今天开学前一天,看到最后有一场大的排位赛,就上去试 ...

  6. js 从两道面试题加深理解闭包与箭头函数中的this

     壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ...

  7. 《Java面试全解析》1000道面试题大全详解(转)

    <Java面试全解析>1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃 ...

  8. 搞定ReentrantReadWriteLock 几道小小数学题就够了

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

  9. ACM/ICPC 之 欧拉回路两道(POJ1300-POJ1386)

    两道有关欧拉回路的例题 POJ1300-Door Man //判定是否存在从某点到0点的欧拉回路 //Time:0Ms Memory:116K #include<iostream> #in ...

随机推荐

  1. docker无法删除镜像,Error: No such container,附docker常用命令

    最近打算删除掉docker镜像但是发现有几个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such container的错误,最后终于找到了办法直接删除文件,步骤如下: 切换到r ...

  2. 阿里云对象存储OSS支持版本管理特性

    阿里云对象存储OSS现已经全面支持“对象版本管理”特性.该功能适用于所有的存储类型以及区域.当Bucket启用该特性后,“对象版本管理”功能可以保护和恢复误删除.误覆盖的数据. 对象存储OSS“版本管 ...

  3. JavaScript--兼容问题总结

    以下兼容主要面向IE8以上的兼容. 一.window.navigator浏览器信息 <script> console.log(window.navigator); // 用户浏览器的类型 ...

  4. Hbuilder的使用技巧

    /*注:本教程针对HBuilder5.0.0,制作日期2014-12-31*/创建HTML结构: h 8 (敲h激活代码块列表,按8选择第8个项目,即HTML代码块,或者敲h t Enter)中途换行 ...

  5. [CS]C#操作word 2016-04-17 18:30 1506人阅读 评论(35) 收藏

    最近在做的项目已经改了好几版,最近这一版用到了word,当然不是直接使用word,而是使用第三方的ActiveX控件:dsoframer.ocx,此控件的使用和其他控件的使用流程没有任何区别,接下来介 ...

  6. 通知: Spring Cloud Alibaba 仓库迁移

    最近,Spring Cloud 官方修改了各个第三方项目的发布策略,第三方 spring-cloud 项目需要自身维护.基于此策略,Spring-Cloud-Alibaba 项目迁移到了 alibab ...

  7. 字体图标font-awesome

    其实有一些常见的图标使用字体图标比使用img来得好 Font Awesome 官网:http://fortawesome.github.io/Font-Awesome/ 字体代码:http://for ...

  8. @loj - 2093@ 「ZJOI2016」线段树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Yuuka 遇到了一个题目:有一个序列 a1,a2,..., ...

  9. websocket实现五子棋联机对战

    GoBang.html // 对弈的页面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  10. win10 子系统ubuntu中文乱码

    ### . 查看系统是否支持中文 locale -a ### . 如不支持需安装中文包 apt-get install language-pack-zh-hans -y ### . 添加中文支持 lo ...