js_部分面试题(四)
1. 判断价格;
<body>
<select id="month">
<!--option[value=$]{$月份}*12-->
<option value="1">1月份</option>
<option value="2">2月份</option>
<option value="3">3月份</option>
<option value="4">4月份</option>
<option value="5">5月份</option>
<option value="6">6月份</option>
<option value="7">7月份</option>
<option value="8">8月份</option>
<option value="9">9月份</option>
<option value="10">10月份</option>
<option value="11">11月份</option>
<option value="12">12月份</option>
</select>
<select id="cw">
<option value="jingji">经济舱</option>
<option value="toudeng">头等舱</option>
</select>
<button id="btn">计算票价</button>
<p id="price"></p>
<script>
// 1. 先判断月份
// 2. 在判断舱位
// -------------
// 先把JS的代码中用到的元素找出来
var selMonth = document.getElementById("month");
var selCW = document.getElementById("cw");
var btn = document.getElementById("btn");
var P = document.getElementById("price");
var initPrice = 4000; //存储原始价格
var price; //计算出来的最终的价格
// 点击计算票价的按钮之后去计算,事件
btn.onclick = function () {
//写如何计算的代码
var month = +selMonth.value; //获取用户选择的月份
var cw = selCW.value; //获取用户选择的舱位
var discount; //表示折扣
if(month >= 4 && month <= 10){
if(cw == "toudeng"){
// price = initPrice * 0.9;
discount = 0.9;
}else {
// price = initPrice * 0.75;
discount = 0.75;
}
}else{
if(cw == "toudeng"){
// price = initPrice * 0.6;
discount = 0.6;
}else {
// price = initPrice * 0.3;
discount = 0.3;
}
}
price = initPrice * discount;
// console.log(price);
P.innerHTML = "你选择的舱位是:"+ cw + ",选择的月份是:"+ month + ",最终的价格是:" + price;
}
</script>
2. 写素数
var min = 2;
var max = 1000;
var sum = 0;
var index = 0; // 用来计数
for(var num = min; num <= max; num++){
// 2 3 4 5 ... 10000
// 计算 num是不是质数
var flag = true; // true表示是质数
for(var i = 2, v = Math.sqrt(num); i <= v; i++){
if(num % i == 0){
flag = false;
break; // 结束离他最近的那个
}
}
if(flag){
document.write(num + " ");
index++;
sum += num;
if(index % 6 == 0){
document.write("<br>");
}
/*if(index == 5){
document.write("<br>");
index = 0;
}*/
}
}
document.write("<br>" + sum)
</script>
</body>
</html>
<!--
在页面中输出 2 - 10000之间所有的素数,
并在最后计算出来这些素数的和.
-->
3. 在页面上输出100到1000之间既是3的倍数又是5的倍数的数字。
var m = 8909;
var n = 18020;
// 计算最大公约数
var min = m < n ? m : n;
for (var i = min; i > 0; i--){
if (m % i == 0 && n % i == 0){
console.log(m + "和" + n + "的最大公约数是:" + i);
break;
}
}
// 计算最小公倍数
var max = m > n ? m : n;
for (var i = max; ; i++){
if (i % m == 0 && i % n == 0){
console.log(m + "和" + n + "的最小公倍数是:" + i);
break;
}
}
4. 计算两个数的最大公约数和最小公倍数
// 4. 求1!+2!+3!+...+10!的和。
var num = 10;
var sum = 0;
var sumJc = 1;
for(var j=1; j<=num; j++){
sumJc *= j;
// console.log(sumJc);
sum += sumJc;
}
document.write("和为:" + sum);
//---------------------------
var num = 10; // 1!+...10!
var sum = 0;
for (var i = 1; i <= num; i++){
// 循环内部计算i的阶乘
var ji = 1;
for (var j = i; j >= 1; j--){
ji *= j;
}
sum += ji;
}
console.log(sum);
5. 对一个整数分解质因数。例如: 90 = 2 * 3 * 3 * 5
//5. 对一个整数分解质因数。例如: 900 = 2 * 2 *
var num = 90098090;
var temp = num;
var msg = num + " = ";
for (var i = 2; i <= temp; i++){
if (temp % i == 0){
if (i == temp){ // 最后一次的时候不要再添加 * 号
msg += i;
}else{
msg += i + " * ";
}
temp = temp / i;
i--;
}
}
console.log(msg);
//------------------------------------
var num = prompt("请输入一个整数:");
if(num>1){
document.write(num+"=");
for(var i=2; i<=num; i++){
if(i == num){
document.write(num);
break;
}else if(num % i == 0){
num /= i;
document.write(i + " * " );
i--;
}
}
}
6. 在页面中显示出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
for(var num = 100; num < 1000; num++){
var ge = num % 10;
var shi = parseInt(num / 10) % 10;
var bai = parseInt(num / 100);
if(ge ** 3 + shi ** 3 + bai ** 3 === num){
console.log(num);
}
}
7. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 例如6=1+2+3.编程找出1000以内的所有完数。
var max = 100000;
for(var i = 2; i < max; i++){
// 计算i的因子, 得到这些因字的和
var sum = 0;
for(var j = 1; j < i; j++){
if(i % j == 0){
sum += j;
}
}
if(sum == i){
console.log("完数:" + i);
}
}
8. 小游戏——猜数字
while (true){
var num = parseInt(Math.random()*101);
while (true){
var guess = prompt("请输入你猜的数字:范围在0-100");
if(guess == num){
alert("恭喜你,猜对啦");
break;
}else if(guess > num){
alert("你猜大啦");
}else {
alert("你猜小了啦");
}
}
var again = confirm("是否再来一局呢");
if(!again){
alert("欢迎下次再来");
break;
}else {
alert("游戏即将开局,请做好准备");
}
}
9. 猴子分桃
var peach = 6; // 桃子初始量
var monkeyCount = 5; //五只猴
var success = false;
for(; ; peach += 5){
var temp = peach;
for(var monkey=1; monkey<=monkeyCount; monkey++){
if(temp % 5 == 1){
if(monkey == monkeyCount){
success = true;
break;
}
temp = ((temp - 1)/5 * 4);
}else {
break;
}
}
if(success){
console.log(peach);
break;
}
}
10. 定义函数,输入年份,判断年份是否是闰年
function isLeap(year){
return year % 4 ==0 && year % 100 != 0 || year % 400 == 0;
/*if( year % 4 ==0 && year % 100 != 0 || year % 400 == 0){
return true;
}else{
return false;
}*/
}
11. 定义函数,打印1999--2050年中间所有的闰年。(借用第一题的封装好的函数)
function printAllLeap(from, to){
for(var year = from; year <= to; year++){
if(isLeap(year)){
document.write(year + " ");
}
}
}
12. 定义函数,输入一个日期,判断该日期是否合法;例如:输入 2015-2-29不合法。
function isLegal(year, month, day){
// 把一些明显不合法的先拦截掉
if(month > 12 || month < 1 || day > 31 || day < 1) return false;
// day [1,31]
if(month == 4 || month == 6 || month == 9 || month == 11){
return day <= 30;
}else if(month == 2){
if(isLeap(year)){
return day <= 29;
}else{
return day <= 28;
}
}
return true;
}
13. 棋盘上的麦
function chess(i) {
if(i == 1 ) return 1;
return Math.pow(2, i-1) + chess(i-1);
}
console.log(chess(64));
// 求每格应该放多少
function countPer(n){
if(n == 1) return 1;
return 2 * countPer(n-1);
}
//求所有格的和
function sum(n){
if(n == 1) return 1;
return countPer(n) + sum(n-1);
}
14. 定义函数: 计算斐波那契数列第n项
function rabbitCount(j) {
if(j==1 || j==2) return 1;
return rabbitCount(j-1) + rabbitCount(j-2);
}
console.log(rabbitCount(30));
//-------------------------------
// function list(j) {
// var n1 = 1;
// var n2 = 1;
// for(var i=3; i<=j; i++){
// var temp = n2;
// n2 = n1 + n2;
// n1 = temp;
// }
// return n2;
// }
//--------------------
function rabbitCount(n){
if(n == 1 || n == 2) return 1;
var a = 1;
var b = 1;
var count;
for(var i=3; i<=n; i++){
count = a + b;
a = b;
b = count;
}
return count;
}
15. 定义函数, 根据传入的年月日,返回这个年月日是那一年的第几天
function isLeap(year) {
return year%4==0 && year%100!=0 || year%400==0;
}
function fate(year, month){
if(month==4 || month==6 || month==9 || month==11){
return 30;
}else if(month == 2){
if(isLeap(year)){
return 29;
}
return 28;
}
return 31;
}
function howDays(year, month, day){
for(var i=month-1; i>0; i--){
day += fate(year, i);
}
return day;
}
console.log(howDays(2018, 3, 31));
//-----------------------------------------------------
function isLeap(year){
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
function isLegal(year, month, day){
// 把一些明显不合法的先拦截掉
if (month > 12 || month < 1 || day > 31 || day < 1) return false;
// day [1,31]
if (month == 4 || month == 6 || month == 9 || month == 11){
return day <= 30;
}else if (month == 2){
if (isLeap(year)){
return day <= 29;
}else{
return day <= 28;
}
}
return true;
}
function dayPerYear(year, month, day){ // 2018, 3, 30
if(!isLegal(year, month, day)) return -1;
if(month == 1) return day;
return day + sumDays(year, month - 1) // 2018, 2
}
// 求前 month个月的总天数
function sumDays(year, month){ // 2018, 5
if(month == 1) return 31;
return sumDays(year, month - 1) + days(year, month);
}
// 求第month个月的天数
function days(year, month){
if(month == 9 || month == 4 || month == 6 || month == 11){
return 30;
}else if(month == 2){
if(isLeap(year)){
return 29;
}
return 28;
}
return 31;
}
16. 读取学生的10门课的成绩, 然后输出10门课成绩的最高分, 最低分, 总分, 平均分.提示:把10门课的成绩保存如一个数组中.
// var arr = [];
// var sum = 0;
// while(true){
// var temp = +prompt("请输入成绩(0-100)");
// if(temp>=0 && temp<=100){
// arr[arr.length] = temp;
// if(arr.length === 10){
// break;
// }
// }else {
// alert("输入错误,请重新输入");
// }
// }
//
// var maxScore = arr[0];
// var minScore = arr[0];
// for(var j=0; j<arr.length; j++){
// sum += arr[j];
// if(arr[j] > maxScore){
// maxScore = arr[j];
// }
// if(arr[j] < minScore){
// minScore = arr[i];
// }
// }
// console.log("总分为:" + sum);
// var avg = sum/arr.length;
// console.log("平均分为:" + avg);
// console.log("最高分为:" + maxScore);
// console.log("最低分为:" + minScore);
//-------------------------------------------------------------------------
function Student(){
this.scores = [];
this.init = function(){
for(var i=0; i<3; i++){
var score = +prompt("请输入");
this.scores.push(score);
}
};
this.max = function(){
var scores = this.scores;
var m = scores[0];
for(var i=1; i<scores.length; i++){
if(m < scores[i]){
m = scores[i];
}
}
return m;
};
this.sum = function(){
var s = 0;
for(var e of this.scores){
s += e;
}
return s;
};
this.avg = function(){
return this.sum()/this.scores.length;
}
}
var si = new Student();
si.init();
17. 创建100个随机的10到60的随机整数, 然后分别统计每个数字出现的次数
// var max = 60;
// var min = 10;
// var arr = [];
// for(var i=0; i<100; i++){
// var num = parseInt(Math.random() * (max-min+1) + min);
// arr[i] = num;
// }
// var obj = {};
// for(var j=0; j<arr.length; j++){
// if(obj[arr[j]]){
// obj[arr[j]] += 1;
// }else {
// obj[arr[j]] = 1;
// }
// }
// console.table(obj);
// for(var e in obj){
// console.log(e, obj[e]);
// document.write(e + "出现了" + obj[e] + "次" + "<br>");
// }
//-------------------------------------------------------------------
//区间[m, n]
//获得随机区间数
function randomInt(m, n){
return parseInt(Math.random() * (n-m+1) + m);
}
//创建一个长度是count,元素的值的范围是[m, n]的数组
function createArray(count, m, n){
var arr = [];
for(var i=0; i<count; i++){
arr.push(randomInt(m,n));
}
return arr;
}
function statistics(){
var obj = {};
var arr = createArray(400, 10, 60);
for(var num = 10; num<=19; num++){
var c = 0;
for(var e of arr){
if(e == num){
c++;
}
}
// console.log(num + "的个数是" + c);
obj[num + ""] = c;
}
return obj;
}
var result = statistics();
console.log(result["10"]);
console.log(result);
18. 定义一个函数, 判断数组中是否所有的数字都大于0提示: 传入一个数组, 返回布尔值
var arr = [10, 20, -1, 30, 50];
function isAllGTZero(arr){
for(var i=0; i<arr.length; i++){
if(arr[i] <= 0){
return false;
}
}
return true;
}
19. 封装函数: 把两个数组共同的元素放入一个新的数组, 并返回新的数组,提示: 传入两个数组, 返回值为新的数组
// var arr = [1,2,3,4,5,6];
// var arr1 = [2,3,4,5,6,7,8,9];
// console.log(newAry(arr, arr1));
//
// function newAry(array1, array2){
// var newArr = [];
// for(var i=0; i<array1.length; i++){
// for(var j=0; j<array2.length; j++){
// if(array1[i] === array2[j]){
// newArr[newArr.length] = array1[i];
// }
// }
// }
// return newArr;
//
// }
//-----------------------------------------------------------------------
function commonEle(arr1, arr2){
var arr = [];
for(var i=0; i<arr1.length; i++){
var num = arr1[i];
for(var e of arr2){
if(num == e){
arr.push(num);
}
}
}
return arr;
}
var a = commonEle([1, 2, 3, 3], [10, 2, 3]);
console.log(a);
20. 定义一个函数: 可以把数组中的下标为 3 的元素移到数组的开头.提示: 传入一个数组
// var arr = [11,22,33,44,55,66,77,88,99];
// console.log(drift(arr));
//
// function drift(array) {
// array.unshift(+(array.splice(3, 1)));
// return arr;
// }
//----------------------------
//把数组中的下标为i的元素移动到下标为j的位置。
function changeIndex(arr, i, j){
var a = arr.splice(i, 1);
arr.splice(j, 0, a[0]);
return arr;
}
console.log(changeIndex([10, 20, 30, 40], 3, 1));
21. 有一个从大到小排好序的数组{99,85,82,63,60}。现从页面输入一个数,要求按原来的规律将它插入数组中。假设你输入的80,则应该插入到82和63之间。
function insert(arr, num){
for(var i=0; i<arr.length; i++){
if(arr[i] < num){
arr.splice(i, 0, num);
return;
}
}
arr.push(num);
}
var arr = [99, 85, 82, 63, 60];
insert(arr, 80);
console.log(arr);
22. 一个数字中有20个元素,对前10个元素使用升序,后10个元素使用降序。元素都是整数。
// var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
// console.log(sequence(arr));
//
// function sequence(array){
// var newArr = array.splice(10);
// array.sort(function (a, b) { return a-b });
// newArr.sort(function (a, b) { return b-a });
// return array.concat(newArr);
// }
//------------------------------------------------------------------------------------------------
var arr = [1,2,3,4,5,6,7,8,9,10];
function mySort(arr){
var a1 = arr.slice(0, 5);
var a2 = arr.slice(5);
a1.sort(function(a,b){return a-b});
a2.sort(function(a,b){return b-a});
arr.splice(0, arr.length);
// arr.push(...a1.concat(a2));//...展开运算符
Array.prototype.push.apply(arr, a1.concat(a2)) //ES6借调
}
console.log(arr);
23. 传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数。
function counts(s){
// 大写字母的个数, 小写字母的的个数, 数字的个数, 其他字符的个数
// var cs = [0, 0, 0, 0];
var cs = {
upperCase: 0,
lowerCase: 0,
number: 0,
other: 0
}
for (var c of s){
if (c >= "A" && c <= "Z"){
// cs[0]++;
cs.upperCase++;
}else if (c >= "a" && c <= "z"){
// cs[1]++;
cs.lowerCase++;
}else if (c >= "0" && c <= "9"){
// cs[2]++;
cs.number++;
}else{
// cs[3]++;
cs.other++;
}
}
return cs;
}
console.log(counts("fAKJHKHKHKIfjlasdjfoeur93932980?..,,uui]]][[\\"));
24. 去除字符串首尾空格.(写一个自定义的 trim 函数, 不能使用s.trim())
function myTrim(s){
var start, end;
for (var i = 0; i < s.length; i++){
if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
start = i;
break;
}
}
for (var i = s.length - 1; i >= 0; i--){
if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
end = i + 1;
break;
}
}
// return s.substring(start, end);
return s.slice(start, end);
}
console.log("zzz" + myTrim(" \n \t ldfjlsdjfabc sdlfjdls\n \t ") + "zzz");
25. 验证字符串:长度4-16; 只能包含数字、英文字符、下划线三种符号; 首字符不能是数字";
function validate(s){
// 先把一些不满足的给排除掉, 可以最大限度的降低嵌套
// 如果长度小于4或者小于16 直接认为验证没有通过
if (s.length < 4 || s.length > 16) return false;
if (s[0] >= "0" && s[0] <= "9") return false;
for (var c of s){
if (!((c >= "0" && c <= "9")
|| (c.toLowerCase() >= "a" && c.toLowerCase() <= "z")
|| (c == "_"))){
return false;
}
}
return true;
}
console.log(validate("abc1你好"));
26. 创建一个长度为5-10, 内容为数字字母下滑线的随机字符串.
console.log(create());
function create(){
var arr = [];
for(var i=0; i<10; i++){
arr.push(i + "");
}
for(var i=97, z="z".charCodeAt(0); i<=z; i++){
arr.push(String.fromCharCode(i));
arr.push(String.fromCharCode(i-32));
}
arr.push("_");
var s = "";
for(var i=0; i<randomInt(5, 10); i++){
s += arr[randomInt(0, arr.length-1)];
}
return s;
}
function randomInt(m, n){
return parseInt(Math.random() * (n-m+1) + m);
}
27. 将字符中单词用空格隔开,已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开,只保留第一个单词的首字母大写
传入:"HelloMyWorld" // Hello m
返回:"Hello my world"
function foo(s){
/* for (var i = 1; i < s.length; i++){
if (s[i] >= "A" && s[i] <= "Z"){
s = s.replace(s[i], " " + s[i].toLowerCase());
}
}
return s;*/
var temp = "";
var start = 0; // 每次截取的开始的位置
for (var i = 1; i < s.length; i++){
if (s[i] >= "A" && s[i] <= "Z"){ // M
temp += s.slice(start, i) + " " + s[i].toLowerCase();
start = i + 1;
}
}
temp += s.slice(start);
return temp;
}
console.log(foo("HelloHyHorld"));
网友评论