看到两道小学数学题,实在是解不动,用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 ...
随机推荐
- Asterisk项目概述
Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三种协议来实现VoIP,同时可以与目前电话使用的标准硬件进行交互通信,Asterisk在实现VoIP时,不 ...
- node 写的简单爬虫(一)
安装cheerio npm install cheerio --save 引入http和cheeri var http=require("http"); var cheerio=r ...
- python已安装包的查看方法和requirements.text的使用
1.已经安装包的查看方法 命令pip freeze 2. 批量导出命令 pip freeze >requirements.txt 3. 批量导入命令 pip install -r requir ...
- MaxCompute问答整理之6月
本文是基于本人对MaxCompute产品的学习进度,再结合开发者社区里面的一些问题,进而整理成文.希望对大家有所帮助,下面咱们正式开始. 1.什么是MaxCompute呢?MaxCompute是由阿里 ...
- python 检测文件夹的数据变动
from watchdog.observers import Observerfrom watchdog.events import *import time class FileEventHandl ...
- Linux Shell 教程
Shell 教程 Shell 是一个C语言编写的程序,他是用户使用Linux的桥梁,Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面用户通 ...
- ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本
ImportError: No module named tensorflow.compat.v1 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声 ...
- 2019-8-31-dotnet-通过-WMI-获取系统信息
title author date CreateTime categories dotnet 通过 WMI 获取系统信息 lindexi 2019-08-31 16:55:59 +0800 2019- ...
- @codechef - TREEPATH@ Decompose the Tree
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一棵无根树,每个节点上都写了一个整数. 你的任务就是统计有多 ...
- css white-space属性
css white-space属性 规定段落中的文本不进行换行