面试复盘(一)
1.JavaScript求最大公约数和最小公倍数
// 求最大公约数方法:辗转相除法
// 求最小公倍数方法:最小公倍数等于两数之积除以最大公约数
// 使用辗转相除法。即两个数,较大数与较小数相除取余,然后与较小数与余数消除取余,余数与新余数取余…一直到能整除为止,那么最后一个余数就是最大公约数。
var num1 = prompt('请输入正整数x:');
var num2 = prompt('请输入正整数y:');
var num3 = 1;
if (num1 > num2) {
var max = num1; //初始化
var min = num2; //初始化
while (num3 != 0) {
num3 = num1 % num2;
num1 = num2;
num2 = num3; //辗转相除法求最大公约数
}
document.write('最大公约数:' + num1);
document.write('最小公倍数:' + max * min / num1);
} else {
var max = num2;
var min = num1;
while (num3 != 0) {
num3 = num2 % num1;
num2 = num1;
num1 = num3;
}
document.write('最大公约数:' + num2);
document.write('最小公倍数:' + max * min / num2);
}
2.JavaScript判断一个数是不是质数
//质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数
function isPrimeNumber(n) {
if (n < 2) {
return false;
} else {
for (var i = 2; i < n; i++) {
if (n % i == 0) {
// 只要有一个能整除,立即判定为不是质数,返回结果 false
return false;
}
}
// 函数能执行到for循环结束,说明没有执行for循环中return语句
return true;
}
}
console.log(isPrimeNumber(26));
3.JavaScript打印由星号组成的x层三角形
// repeat() 构造并返回一个新字符串,该字符串包含被连接在一起的指定数量的字符串的副本。
const printTriangle = x => {
for (let i = 1; i <= x; i++) {
console.log(" ".repeat(x - i) + "*".repeat(2 * i - 1))
}
}
printTriangle(7)
4.JavaScript输出杨辉三角形
// 杨辉三角形的特点和规律
// 起始行为第0行,第N行为N+1个数
// 从 N >= 2行开始,每一行的数值(不包含两边的数值)都是上一行两个数字的相加。
// 当 J=1 或 J=N+1时, 其值为:1
// 当 J != 1 且 J != N+1时:其值为第N-1行的第J-1个值于 第N-1行的第J个值的和
var num = Number(prompt('please input')); //杨辉三角形的层数
var y = []; //空数组装杨辉三角形
// 动态生成二维数组
for (var i = 0; i < num; i++) {
y[i] = new Array()
for (var j = 0; j <= i; j++) {
y[i][j] = 0;
}
}
// 最外层赋值1
for (var i = 0; i < num; i++) { //三角形的每行第一列和最后一列赋值为1
y[i][0] = 1;
y[i][y[i].length - 1] = 1;
}
// 往三角形[数组]里面填充数字
for (var i = 2; i < num; i++) {
for (j = 1; j <= y[i - 1].length - 1; j++) {
y[i][j] = y[i - 1][j - 1] + y[i - 1][j]
}
}
// 遍历数组,打印出三角形
document.write('<table><tbody>');
for (var i = 0; i < num; i++) {
document.write('<tr>')
for (j = 0; j <= i; j++) {
document.write('<td style="width: 20px;height: 20px;text-align: center;">' + y[i][j] + '</td>')
}
document.write('</tr>')
}
document.write('</tbody></table>');
5.JavaScript分解质因数
// 定义一个数组,用来存放因数
var factorList = [];
// 定义数组里面数的位置的起始值0
var a = 0;
// 定义分解质因数的函数
function decomposition(num) {
var i = 2;
// 如果被分解的数为1、2、3,则直接存入数组,并返回结果
if ((num == 1) || (num == 2) || (num == 3)) {
factorList[a++] = num;
return factorList;
}
// 如果被分解的数不是1、2、3,则需要先存下它最小的因数,然后除以它的最小的因数之后再次进行分解
// num/2 是因为 如果在num的一半大小之前如果没有找到因数,那么之后也不会有,因此不需要后面的部分也进入循环,提升效率
for (; i <= num / 2; i++) {
if (num % i == 0) {
// 存下一个因数(后面跳出循环保证存入的是最小的)
factorList[a++] = i;
// 除以因数后,继续进行分解操作
decomposition(num / i);
// 跳出循环,确保存入数组的是最小的因数
break;
}
}
// 存放最后一个质因数
if (i > num / 2) {
factorList[a++] = num;
}
return factorList;
}
// 提示输入一个需要分解质因数的数
var input = Number(prompt("请输入一个数:"));
// 传入分解质因数的函数中,调用
decomposition(input);
// 定义输出的结果
result = input + "="
// 循环将数组中的值,即各质因数放入结果中
for (var x = 0; x < factorList.length; x++) {
result += factorList[x];
// 最后一个质因数放入结果后,不需要*号
if (x != factorList.length - 1) {
result += "*";
}
}
// 页面中写出结果
document.write("<h1>" + result + "</h1>");
6.JavaScript有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。
function find(n, m) { //定义一个输出最后一个人下标的方法,两个参数 n表示总人数,m表示报的数
var arr = []; //定义一个空数组
for (var i = 0; i < n; i++) {
arr[i] = true; //建立一个可以有n元素的数组,用来模拟报数的总人数 数组中值为true的表示剩下的人,false表示出去的人
}
var total = n,
index = 0,
count = 0; //定义三个变量total剩下的的人数,index表示数组的下标,count表示从从0-m报的数的下标
//循环,直到剩下一个人
while (total > 1) {
if (arr[index] == true) {
count++; //如果数组中的值为true,那么从conut+1
if (count == m) { //判断报数的人的数是否为m,如果为m,
count = 0; // 那么重置count计数器
arr[index] = false; //报m的人出去,即将他的值改为false
total--; //将剩下的人数-1
}
}
index++; //下标+1
if (index == arr.length) { //如果到了最后一人,
index = 0; //重置下标为0
}
} //循环结束
//遍历整个数组
for (var i = 0; i < arr.length; i++) {
if (arr[i] == true) { //值为true的人就是剩下的最后一个人
return i + 1; //因为数组下标是从0开始的,而报数是从1开始的,所以剩下的那个人报的数为数组下标+1
}
}
return -1; //如果没有返回-1
}
console.log(find(10, 3 )); //调用find()方法
7.JavaScript 1元纸币兑换1分,2分和5分硬币,问组合方式多少种.
function fn() {
var num = 100;
var sum = 0;
var a = 5;
var b = 2;
var c = 1;
for (var ai = 1; ai <= num / a; ai++) {
for (var bi = 1; bi <= (num - ai * a); bi++) {
for (var ci = num; ci > 0; ci--) {
if (ai * 5 + bi * 2 + ci == 100) {
sum++
document.write(sum + "种情况" + ai + "个5分纸币," + bi + "个2分纸币," + ci + "个1分纸币<br />")
}
}
}
}
document.write(sum + "种情况")
}
fn()
8.vue cil快速创建项目
vue create newProject
)
9.JS 原型对象的constructor属性
10.new操作符干了什么
在JavaScript中,new操作符用于创建一个给定构造函数的实例对象
- new创建了一个空白对象{}
- 调用constructor执行,替换里面this指向为(空白对象{})
- 执行constructor,向空白对象上添加属性和值
- “默认”把this对象返回到调用的地方
11.es6基本数据类型
Number,String, Null, Undefined, Symbol, Boolean