最近去面试,遇到很多算法类的题目,看的是一脸懵,故特此记录下了此份试题,慢慢去研究里面的问题。
1 一个整数,大于0,不用循环和本地变量,按照n,2n,4n,8n的顺序递增,当值大于5000时,把值按照指定顺序输出来。
例:n=1237
则输出为:1237,2474,4948,9896,9896,4948,2474,1237
ps.暂时没找到不用循环的js写法
function multiple(n){
var mult = Math.floor(5000/n),
arr = [],
arr1 = [],
num;
for(var i=0;i
arr.push(num);
}
var arr1 = arr.slice().reverse()
//arr1 = [...arr].reverse();
//var arr1 = [].concat(arr).reverse()
//var arr1 = Object.assign([],arr).reverse()
return arr.concat(arr1);
}
2 将一个键盘输入的数字转化成中文输出,例如,输入1234567 则输出一百二十三万四千五百六十七
var _change = {
ary0:["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"],
ary1:["", "十", "百", "千"],
ary2:["", "万", "亿", "兆"],
init:function (name) {
this.name = name;
},
strrev:function () {
var ary = []
for (var i = this.name.length; i >= 0; i--) {
ary.push(this.name[i])
}
return ary.join("");
}, //倒转字符串。
pri_ary:function () {
var $this = this;
var ary = this.strrev();
var zero = "";
var newary = "";
var i4 = -1;
for (var i = 0; i < ary.length; i++) {
if (i % 4 == 0) { //首先判断万级单位,每隔四个字符就让万级单位数组索引号递增
i4++;
newary = this.ary2[i4] + newary; //将万级单位存入该字符的读法中去,它肯定是放在当前字符读法的末尾,所以首先将它叠加入$r中,
zero = ""; //在万级单位位置的“0”肯定是不用的读的,所以设置零的读法为空
}
//关于0的处理与判断。
if (ary[i] == '0') { //如果读出的字符是“0”,执行如下判断这个“0”是否读作“零”
switch (i % 4) {
case 0:
break;
//如果位置索引能被4整除,表示它所处位置是万级单位位置,这个位置的0的读法在前面就已经设置好了,所以这里直接跳过
case 1:
case 2:
case 3:
if (ary[i - 1] != '0') {
zero = "零";
} ; //如果不被4整除,那么都执行这段判断代码:如果它的下一位数字(针对当前字符串来说是上一个字符,因为之前执行了反转)也是0,那么跳过,否则读作“零”
break;
}
newary = zero + newary;
zero = '';
}
else { //如果不是“0”
newary = this.ary0[parseInt(ary[i])] + this.ary1[i % 4] + newary; //就将该当字符转换成数值型,并作为数组ary0的索引号,以得到与之对应的中文读法,其后再跟上它的的一级单位(空、十、百还是千)最后再加上前面已存入的读法内容。
}
}
if (newary.indexOf("零") == 0) {
newary = newary.substr(1);
}//处理前面的0
return newary;
}
}
//创建class类
function change() {
this.init.apply(this, arguments);
}
change.prototype = _change;
//创建实例
var k = new change("00102040");
alert(k.pri_ary());
3 至少写出一种排序算法
冒泡算法
function bubbleSort(arr){
var len = arr.length;
for(var i=0; i for(var j=0; j if( arr[j] var temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; } 4 盘算102-200之间有多少个素数,并输出所有素数 var i,j,m; m=0; } if(m==1){ 5 给定一个字符串,输出本字符串中只出现一次并且最靠前的那个的位置? function unique(str){ 例如:ahhhdjnikkjhasc 则是d,输出5 6 写一个函数,找出一个整数数组中,第二大的数 function bubbleSort(arr){ var len = arr.length; for(var i=0; i for(var j=0; j if( arr[j] var temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } } return arr[1]; } 7 猴子第一天摘下若干个桃子,当即吃掉一半,不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃掉剩下桃子的一半零一个,到第十天早上的时候,发现只剩下一个桃子了,问猴子第一天摘下多少个桃子? function peach(day){ 8 设计一个3人斗地主的发牌算法(54张牌发给三个人,最后剩下3张) // 洗牌算法,传入一个数组,随机乱序排列,不污染原数组 var newArr = arr.slice(0); return newArr; // 生成一副扑克牌 // 第二步:定义13张普通牌 // 第三步:定义2张特殊牌,大王与小王 // 第四步:根据上述数组生成54张牌 return allCards; // 随机发N张扑克牌 // 洗牌-不污染原先的数组 return randomCards.slice(0, num); // 测试用例 // 生成一副洗好的全新乱序牌 9 简述QQ登录过程 a.输入账号和密码,先进行前端的字符校验,是否符合填写规范 b.点击登录,进行ajax请求, c.首先判断数据库里是否有这个账号,没有则给出提示该账号尚未注册 d.判断输入的密码是否和数据库的密码一致 e.如果一致返回状态成功,实现跳转,如果不一致,则给出提示,账号或密码错误 10 输入一个字符串,打印该字符串中字符的所有排列 function permutate(str) { 觉得让一个前端三十分钟做完这些题目,是不是有点~~咳咳,不说了,还是努力提升自己吧,自己比较菜,还写不出来,有几个是从网上找的答案,先保存着,日后再慢慢消化吧~
var k=0;
for (i=100;i<=200;i++){
for(m=1,j=2;j< i;j++)
if(i%j==0) {
break;
k++;
console.log (i);
console.log (k);
}
}
var arr = str.split(""),
arr1=[],
arr2=[],
temp={},
len = arr.length;
for(var i=0;i
temp[arr[i]]= 'abc';
arr1.push(arr[i]);
}else{
arr2.push(arr[i]);
}
}
var len1 = arr1.length,
len2 = arr2.length;
for(var j=0;j
var chart = arr1[j];
break;
}
}
var index = arr.indexOf(chart);
return index+1;
}
var i=0,
sum=0;
for(var i=0;i
}
return sum;
}
function shuffle(arr) {
if (!arr) {
throw '错误,请传入正确数组';
}
for (var i = newArr.length - 1; i >= 0; i--) {
// 随机范围[0,1)
var randomIndex = Math.floor(Math.random() * (i + 1));
var itemAtIndex = newArr[randomIndex];
newArr[randomIndex] = newArr[i];
newArr[i] = itemAtIndex;
}
}
function generatePoker() {
// 第一步:定义四个花色,这里就用中文了
var cardType = ['黑桃', '红桃', '梅花', '方块'];
var cardValue = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
var specialCard = ['大王', '小王'];
var allCards = [];
for (var i = 0,len1 = cardType.length; i < len1; i++) {
for (var j = 0,len2 = cardValue.length; j < len2; j++) {
allCards.push(cardType[i] + cardValue[j]);
}
}
allCards = allCards.concat(specialCard);
}
function dealPoker(num) {
if(!num || num>54 || typeof(num)!== 'number') {
throw '错误,传入的数字非法,只能是[1-54]';
}
// 生成扑克牌
var allCards = generatePoker();
var randomCards = shuffle(allCards);
}
console.log(dealPoker(3));
console.log(dealPoker(4));
console.log(dealPoker(10));
var poker = dealPoker(54);
// 接下来如果想要发牌,依次将数组pop即可,因为它本身已经被打乱了,可以一直发完54张
var result = [];
if(str.length > 1) {
var left = str[0];
var rest = str.slice(1, str.length);
var preResult = permutate(rest);
for(var i=0; i
result.push(tmp);
}
}
} else if (str.length == 1) {
return [str];
}
return result;
}