js思维案例题目
1.根据一个数字日期,判断这个日期是这一年的第几天例如: 2016和02和11,计算后结果为42
1 var y = 2016;//+prompt("请输入年份") ; 2 var m = 2; 3 var day = 11; 4 var aDays = 0; 5 switch (m) { 6 case 12: 7 aDays += 30; 8 case 11: 9 aDays += 31; 10 case 10: 11 aDays += 30; 12 case 9: 13 aDays += 31; 14 case 8: 15 aDays += 31; 16 case 7: 17 aDays += 30; 18 case 6: 19 aDays += 31; 20 case 5: 21 aDays += 30; 22 case 4: 23 aDays += 31; 24 case 3: 25 if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) { //判断二月是29天还是28天; 26 aDays += 29; 27 } else { 28 aDays += 28; 29 } 30 case 2: 31 aDays += 31; 32 case 1: 33 aDays += day; 34 break; 35 default: 36 console.log("错误的月份") 37 break; 38 39 } 40 console.log(aDays);
2:求出1/1 - 1/2 + 1/3 - 1/4…..1/100的和
var sum = 0; var a = 1; for(var i = 1; i <= 100; i++){ if(i % 2 == 0){ //如果i为偶数,那么则用- sum = sum - a / i; }else{ sum = sum + a/i; //否则就相加 } } console.log(sum);
3.篮球从5米高的地方掉下来,每次弹起的高度是原来的30%,经过几次弹起,篮球的高度小于0.1米。
1 var h = 5; 2 var i = 1; 3 while (true) { 4 h = h * 0.3; 5 if(h < 0.1){ 6 console.log("弹起了" + i + "次"); 7 break; //当i小于0.1时,中断循环; 8 } 9 i++; 10 }
4.打印出1000-2000年中所有的闰年,并以每行四个数的形式输出(document.write)
1 var n = 0; 2 for(var i = 1000; i <= 2000; i++){ 3 if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){ 4 document.write(i + " "); 5 n++; //纪录次数,递增 6 if(n % 4 == 0){ //当为4的倍数时,换行; 7 document.write("<br>"); 8 } 9 } 10 }
5.打印直角三角形
1 for(var j = 1; j <=6; j++){ 2 for(var i = 1; i <= j; i++){ 3 document.write("*"); 4 } 5 document.write("<br>"); 6 }
6.打印正三角形
//拆分成3个三角形,第一个是倒着的直角三角形,第二个是正三角形,利用空格把三角形往外挤。
1 for(var i=1; i <=7; i++){ 2 for(var a = 7; a >i; a--){ 3 document.write(" "); 4 } 5 for(var k = 1; k<i+3; k++){ //加三则按照3 5 7排列;不加则按照 2 4 6排列; 6 document.write("*"); 7 } 8 for(var k = 1; k<i; k++){ 9 document.write("*"); 10 } 11 document.write("<br>"); 12 }
7.计算10的阶乘 //1*2*3*4*。。。*10
1 var cj = 1; 2 for(var i = 1; i <= 10; i++){ 3 //console.log(i); 4 cj = cj * i ; 5 } 6 console.log(cj);
8.求100-999之间的水仙花数 //abc = a*a*a + b*b*b + c*c*c 即为水仙花数
1 for(var i = 100; i <= 999; i++){ 2 var a = parseInt(i/100); //获取百位数 3 var b = parseInt(i/10)%10; //获取十位数 4 var c = parseInt(i%10); //获取个位数 5 if(i == a*a*a + b*b*b + c*c*c){ 6 console.log(i); 7 } 8 }
9.有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量 用循环嵌套做;
//规律:
1 // 1 2 // 1 * 2 3 // 1 * 2 * 2 4 // 1 * 2 * 2 * 2 5 var sum = 0; 6 for(var k = 1;k<=64;k++){ 7 var num = 1; 8 for(var i = 1;i <64; i++){ 9 num = num * 2; //按照规律,每次乘以2; 10 } 11 sum = sum + num; //每次都把之前的sum进行相加; 12 } 13 console.log(sum * 0.00001);
10.有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
///第一种,直接添加,用sort排序;
function insert(arr, data) { arr.push(data); arr.sort(function(a, b) { return a - b; })
}
var arr = [3, 4, 5, 7, 8, 9];
console.log(insert(arr, data))
console.log(insert(arr, data))
1 //第二种
for (var i = 0; i < arr.length; i++) { 2 if (data < arr[i]) { 3 break; 4 } 5 } 6 // 2.将这个位置到最后的数据,全部再向后挪一位 7 for (var j = arr.length - 1; j >= i; j--) { 8 arr[j + 1] = arr[j]; 9 } 10 // 3.将要插入的数据,放在第一步找到的位置处 11 arr[i] = data; 12 } 13 var arr = [3, 4, 5, 7, 8, 9]; 14 console.log(arr); 15 insert(arr, 6); 16 console.log(arr);
11.定义一个30项的数组,数组的每一项要求是1-10的随机数,每间隔5个数字,求出前五个数的平均值
// 定义一个数组 var arr = []; for(var i= 0; i<30; i++){ arr.push(random(1,10)); } console.log(arr); for(var l = 0 ; l<arr.length;l+=5){ console.log(arr.slice(l,l+5)); console.log(avg(arr.slice(l,l+5))); } //求平均数 function avg(myArr){ var sum = 0; for(var j = 0; j<myArr.length;j++){ sum += myArr[j]; } return sum /myArr.length; } //生成随机数 function random(max,min){ return Math.round(Math.random() * (max-min)) + min; }
13.编写生成4个数字验证码的函数,并生成10次,同时将结果存入数组
function rnumber(){ var arr= []; for(var i = 0; i<10; i++){ var a = random(0,9); var b = random(0,9); var c = random(0,9); var d = random(0,9); arr.push("" + a + b + c + d); } return arr; } console.log(rnumber()); //生成随机数 function random(max,min){ return Math.round(Math.random() * (max-min)) + min; }
14.敏感词过滤//代码有问题!!,暂未解决
var arr = ["a", "w", "e", "sv", "qw"]; var str = "aw暖哒e阿大阿sv,请问我去qw"; for (var i = 0; i < arr.length; i++) { for (var j = 0; j < str.length; j++) { str = str.replace(arr[i], "*"); } } console.log(str);
15.统计每个字符出现的次数,结果显示{a:2, b:1, c:2, d:1}
var str = "aabccdsdadadadsadadafqdqeqwsqwq"; //定义一个空字符 var newStr = ""; //循环遍历str for (var i = 0; i < str.length; i++) { //如果空字符里面没有str[i],那么就会返回-1, if (newStr.indexOf(str[i]) == -1) { //并放入空字符中 newStr += str[i]; } } console.log(newStr); //拿到去重字符的数组
var newObj = {}; for (var i = 0; i < str.length; i++) { if (newObj[str[i]]) { //第一次为undefined,所以走else,第二次为1,走第一个。如果newStr里面有str[i],则++,否则 newObj[str[i]]++; } else { newObj[str[i]] = 1; } } console.log(newObj);
16.随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么
var fiveNumber = random(0, 99999); var fiveString = fiveNumber.toString(); console.log("该数是" + fiveString); console.log("该数共有" + (fiveString.length) + "位"); for (var i = 0; i < fiveString.length; i++) { numI = parseInt(i); console.log("第" + (numI + 1) + "位是" + fiveString.charAt(i)); // console.log(fiveString.charAt(i)) } function random(max, min) { return Math.round(Math.random() * (max - min)) + min; }