Bootstrap

59道JS常见逻辑算法程序题(附带题目和答案)

  1. 输出10到1的偶数
  2. 输出1-100间能被7整除的数
  3. 输出1-21之间不能被7整除数的累加和
  4. 输出1-10与5相乘的结果
  5. 计算1-100的和并输出结果
  6. 把100-200之间不能被3整除的数输出
  7. 将1998-2008之间的闰年年份输出
  8. 求乘积等于100的所有乘数和被乘数(以一对的方式输出)
  9. 求斐波那契数列40个数,这个数列的特点为:第1,2两个数为1和1,从第三个数开始,该数是前面两个数的和,即1,1,2,3,5,8,13,21......
  10. 求数组中所有元素的和
  11. 求数组中所有元素的平均值
  12. 求数组中所有元素的最大值
  13. 倒序遍历输出数组
  14. 把数组中的每一个元素用&拼接到一起并输出
  15. 去掉数组中重复的0,并把其他的数据放在一个新的数组中
  16. 反转数组
  17. 冒泡排序:将一个数组按照从小到大的顺序进行排列
  18. 冒泡排序:将一个数组按照从大到小的顺序进行排列
  19. 请输入1-100之间能够被5和6整除或者能被7整除的数
  20. 打印输出100以内的不带7和7的倍数
  21. 打印一个分数(几分之几例如 2/1  3/2  .....)
  22. 打印输出100以内的 3的倍数和7的倍数
  23. 用do  while  求 3!  3x2x1+2x1+1x1=9
  24. 100以内偶数与奇数相加
  25. 一个直角三角形
  26. 100以内不带7和7的倍数
  27. 求1-n的累加和
  28. 圆的面积
  29. 求两个数中的最大值
  30. 求三个值中的最大值
  31. 判断一个随机输入数是不是素数
  32. 函数写阶乘
  33. 求任意个数的最大值
  34. 求任意个数的和
  35. 求斐波那契数列Fibonacci中的第n个数是多少? 1 1 2 3 5 8 13 21...
  36. 输入一个年份,判断是否是闰年[闰年:能被4整数并且不能被100整数,或者能被400整数]
  37. 输入某年某月某日,判断这一天是这一年的第几天?(方法一)
  38. 输入某年某月某日,判断这一天是这一年的第几天?(方法二)
  39. 自己实现输入一个数获取长度
  40. 设计一个函数,输入行数和列数,生成相应表格
  41. 判断水仙花 例:153=1*1*1+5*5*5+3*3*3
  42. 使用1块,2块,5块钱,凑出20块钱的所有可能
  43. 请使用代码在页面上的效果
  44. 请使用代码实现,去掉一个最高分,去掉一个最低分之后求平均分是多少?
  45. 设计一个函数,让用户输入一个数字,然后反转输出该数字   例:2891 -》 1982    
  46. 求10-20之间的随机数
  47. 随机生成rgb的颜色
  48. 将当前的时间格式化输出,封装成一个函数完成此操作  格式:2021年12月8日,17时21分15秒
  49. 随便输入两个时间戳/毫秒值判断相差 天 时 分 秒
  50. 截取字符串"我爱中华人民共和国",中的"中华"
  51. "abcoefoxyozzopp"查找字符串中所有o出现的位置
  52. 把字符串中所有的o替换成!
  53. 判断一个字符串中出现次数最多的字符,统计这个次数        
  54. 将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现
  55. 将一个字符串数组的元素的顺序进行反转。["a", "b", "c", "d"] -> [ "d","c","b","a"]。使用两种种方式实现。提示:第i个和第length-i-1个进行交换
  56. 数组[1500, 1200, 2000, 2100, 1800],把超过2000的删除
  57. ["c", "a", "z", "a", "x", "a"]找到数组中每一个a出现的位置
  58. 编写一个方法去掉一个数组的重复元素    
  59. 判断输入的一个11位数的电话号码...要求是前3位是"010"然后跟着一个"-"...后面剩余个数都是数字

1.输出10到1的偶数

for(var a = 10;a >= 1;a--){
	if(a % 2 == 0){
	console.log(a)
	}
}

2.输出1-100间能被7整除的数

for (var a = 1;a <= 100; a++) {
	if(a % 7 == 0){
		console.log(a)
	}
}

3.输出1-21之间不能被7整除数的累加和

var s = 0
for (var a = 1; a <= 21; a++) {
	if (7 % a != 0) {
		s = a+s
		console.log(s)
	}
}

4.输出1-10与5相乘的结果

var a=1
while(a<=10){
	var b=5
	 b*=a
	 console.log(a+"与5相乘的结果为:"+b)
	 a++
}

5.计算1-100的和并输出结果

var c=1
var d=0
while(c<=100){
	d+=c
	c++
}
console.log("1-100的和并输出结果为:"+d)

6.把100-200之间不能被3整除的数输出

var e=100
while(e<=200){
	if(e%3 != 0){
	   console.log("100-200之间不能被3整除的数有:"+e)
	}
   e++
} 

7.将1998-2008之间的闰年年份输出

while(f<=2008){
	if(f%4==0 && f%100!=0 || f%400==0){
	console.log("1998-2008之间的闰年年份有:"+f)
	}
	f++
}

8.求乘积等于100的所有乘数和被乘数(以一对的方式输出)

for(var t=-100;t<=50;t++){
	for(var y=-100;y<=100;y++){
		if(t*y==100){
			console.log("乘积等于100的所有乘数和被乘数有:"+t,y);
		};
	};
};

9.求斐波那契数列40个数,这个数列的特点为:第1,2两个数为1和1,从第三个数开始,该数是前面两个数的和,即1,1,2,3,5,8,13,21......

var o=1;
var l=1;
var c;
var z=1;
while(z<=40){
	c=o+l;
	o=l;
	l=c;
	console.log("六-斐波那契数列"+z+"个数为:"+o);
	z++;
};

10.求数组中所有元素的和

var a=[1,2,3,4,5];
var sum=0;
for(var i=0;i<=a.length-1;i++){
	sum+=a[i];
};
console.log(sum);

11.求数组中所有元素的平均值

var b=[3,4,5,6,7];
var sum=0;
for(var i=0;i<=b.length-1;i++){
	sum+=b[i];
};
var z=sum/b.length;
console.log(z);

12.求数组中所有元素的最大值

var c=[5,8,9,6,3,];
var r=c[0]; //5
for(var i=1;i<=c.length-1;i++){
	if(r<c[i]){
		r=c[i];
	};
};
console.log(r);

13.倒序遍历输出数组

var f=[1,2,3,4,5];
var d=[];
var o=0;
var i=f.length-1;
while(i>=0){
	d[o]=f[i];
	o++;
	i--;
};
console.log(d);

14.把数组中的每一个元素用&拼接到一起并输出

var arr1=[10,20,30,40,50];
var sum="";
for(var i=0;i<=arr1.length-2;i++){
	sum+=arr1[i]+"&";
};
console.log(sum+arr1[arr1.length-1]);

15.去掉数组中重复的0,并把其他的数据放在一个新的数组中

var arr2=[11,0,3,21,32,0,2,0];
var nuw=[];
for(var i=0;i<=arr2.length-1;i++){
	if(arr2[i]!=0){
		nuw[nuw.length]=arr2[i];
	};
};
console.log(nuw);

16.反转数组

var eiu=[10,20,30,40,50];
var temp;
var o=0;
for(var i=eiu.length-1;i>=2;i--){
	temp=eiu[o];
	eiu[o]=eiu[i];
	eiu[i]=temp;
	o++;
};
console.log(eiu);

17.冒泡排序:将一个数组按照从小到大的顺序进行排列

var temp;
for(var i=0;i<=arr.length-1;i++){	//外层循环一次
	  for(var j=0;j<=arr.length-i-1;j++){		//内层循环
		 if(arr[j]>arr[j+1]){
			var temp=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=temp;
		};
	};
};

18.冒泡排序:将一个数组按照从大到小的顺序进行排列

var arr=[8,6,4,7,5];
var temp;
for(var i=0;i<=arr.length-1;i++){	//外层循环一次
	for(var j=0;j<=arr.length-i-1;j++){		//内层循环
		if(arr[j]<arr[j+1]){
			temp=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=temp;
		};
	};
};
console.log(arr);

19.请输入1-100之间能够被5和6整除或者能被7整除的数

for(var a=0;a<=100;a++){
	if(a%5==0 && a%6==0 ||a%7==0){
		console.log(a);
	};
};

20.打印输出100以内的不带7和7的倍数

for(var i=0;i<=9;i++){
	for(var o=1;o<=9;o++){
		if(i!=7 && o!=7 && (10*i+o)%7==0){
			var sum=10*i+o;
			console.log(sum);
		};
	};
};

21.打印一个分数(几分之几例如 2/1  3/2  .....)

var temp=Number(prompt("请输入你要输入的数字"));
var temp1; 
var a=1;
var b=1;
for(var i=1;i<=temp;i++){
	temp1=a+b;
	a=b;
	b=temp1;
	var sum=a+"/"+temp1;
	console.log(sum);
};

22.打印输出100以内的 3的倍数和7的倍数

for(var i=1;i<=100;i++){
	if(i%3==0 || i%7==0){
		console.log(i);
	};
};

23.用do while  求 3! ,结果为  3x2x1+2x1+1x1=9

var i=3; 
var sum=0;
do{
	var o=i; //2
	var som=1;
	while(o>=1){
		som*=o;
		o--;
	}
	sum+=som;
	i--;
}while(i>=1);
console.log(sum);

24.100以内偶数与奇数相加

var sum=0;
var sum1=0;
function arr(a){	
	for(var i=1;i<=a;i++){
		if(i%2==0){
			sum+=i;
		}else{
			sum1+=i;
		};
	};
	console.log("偶数为"+sum);
	console.log("奇数为"+sum1);
};
arr(100);

25.一个直角三角形

function arr1(b){
	for(var i=0;i<=b;i++){
		document.write("<br />");
		for(var o=1;o<=i;o++){
			document.write(o+"*"+i+"="+o*i+"&nbsp;"+"&nbsp;"+"&nbsp;");
		};
	};
};
arr1(9);

26.100以内不带7和7的倍数

function arr3(c){
	for(var n=0;n<=c;n++){
		for(var k=1;k<=c;k++){
			if(n!=7 && k!=7 && (n*10+k)%7==0){
			    console.log(n*10+k);
			};
		};
	};
};
arr3(9);

27.求1-n的累加和

function arr1(i,n){
	var sum = 0;
	for(;i<=n;i++){
		sum+=i;
	}
	console.log(sum);
}
arr1(1,100);

28.圆的面积

function arr3(r){
	S = 3.14*r*r;
	console.log(S);
}
arr3(10);

29.求两个数中的最大值

function arr4(a,b){
	if(a>b){
		console.log(a);
	}else{
		console.log(b);
	}
}
arr4(1,2);

30.求三个值中的最大值

function arr5(a,b,c){
	if(a>b && a>c){
		console.log(a);
	}else if(b>a && b>c){
		console.log(b);
	}else{
		console.log(c);
	};
};
arr5(5,2,3);

31.判断一个随机输入数是不是素数

var num=prompt("请输入你想判断的数值");
var temp=true;
for(var i=2;i<num;i++){
	if(num % i==0){
		//判断为不是质数
		//document.write(num+"不是质数");
		temp=false;
	};
};
if(temp){
	document.write(num+"是质数");
}else{
	document.write(num+"不是质数");
};

32.函数写阶乘

function arr2(n){
	var sum=0;
	for(var o=1;o<=n;o++){
		var som=1;
		for(var i=1;i<=o;i++){
			som*=i;
		};
		sum+=som;
	};
	console.log(sum);
};
arr2(3);

33.求任意个数的最大值

function arr(a,b,c,d){
	var temp = arguments[0];
	for(var i=0;i<=arguments.length-1;i++){
		if(temp<arguments[i]){
			temp = arguments[i];
		};
	};
	return temp;
};
console.log(arr(1,2,3,4,5)); //5

34.求任意个数的和

function arr1(a,b,c,d){
	var sum = 0;
	for(var i=0;i<=arguments.length-1;i++){
		sum+=arguments[i];
	};
	return sum;
};
console.log(arr1(1,2,3,4,5)); //15

35.求斐波那契数列Fibonacci中的第n个数是多少?      1 1 2 3 5 8 13 21...

function arr2(a,b,c,d){
	for(var i=1;i<=d;i++){
		c = a+b;
		a = b;
		b = c;
		console.log(a);
	}
}
arr2(1,1,0,1000);

36.输入一个年份,判断是否是闰年[闰年:能被4整数并且不能被100整数,或者能被400整数]

function arr5(){
	arr6 = prompt("请输入你要判断的年份");
	if(arr6%4==0 && arr6%100!=0 || arr6%400==0){
		console.log("该年份是润年哦~");
	}else{
		console.log("该年份是平年哦~");
	};
};
arr5();

37.输入某年某月某日,判断这一天是这一年的第几天?(方法一)

function arr0(sum,svm,som){
	arr7 = prompt("请输入年份");
	arr8 = prompt("请输入月份");
	sem = Number(prompt("请输入日子"));
	for(var i=1;i<arr8;i++){
		if(i!=2){
			if(i==4||i==6||i==9||i==11){
				sum += 30;
			}else{
				svm += 31;
			}
		}else{
			if(arr7%4==0 && arr7%100!=0 || arr7%400==0){
				//console.log("该年份是润年哦~");
				som = 29;
			}else{
				//console.log("该年份是平年哦~");
				som = 28;
			};
		};
	};
	var tianshu = sum+svm+som+sem;
	console.log("这天是该年的第 "+tianshu+" 天哦~");
}
arr0(0,0,0);

38.输入某年某月某日,判断这一天是这一年的第几天?(方法二)

var a=prompt("请输入年份");
var b=prompt("请输入月份");
var c=Number(prompt("请输入第几日"));
var e=0;
if(a%400==0||a%100!=0&&a%4==0){
	var arr=[31,29,31,30,31,30,31,31,30,31,30,31];//月份
			 // 0  1  2  3  4
	for(var i=0;i<=b-2;i++){
		e+=arr[i];
		console.log(e+c);
	};
}else{
	var arr=[31,28,31,30,31,30,31,31,30,31,30,31];
	for(var i=0;i<=b-2;i++){
		e+=arr[i];
		console.log(e+c);
	};
};

39.自己实现输入一个数获取长度

function fn(){
	var a = Number(prompt("请输入数值"));
	//22
	var b = 0.1;
	for(var i=1;i<=a;i++){
		b*=10; //1 //10
		c = parseInt(a/b);
		if(c>0&&c<10){
			document.write("这个数是"+i+"位数");
			break;
		};
	};
};
fn();

40.设计一个函数,输入行数和列数,生成相应表格

function fn(){
var a = prompt("请输入行");
var b = prompt("请输入列");
document.write("<table>");
for(var i=1;i<=a;i++){
	document.write("<tr>");
	for(var o=1;o<=b;o++){
		document.write("<td>");
		document.write("</td>");
	};
	document.write("</tr>");
};
document.write("</table>");
};
fn();

41.判断水仙花 例:153=1*1*1+5*5*5+3*3*3

for(var i=0;i<=9;i++){
	for(var o=0;o<=9;o++){
		for(var u=0;u<=9;u++){
			if(i*i*i+o*o*o+u*u*u==i*100+o*10+u){
				document.write(i*100+o*10+u);
				document.write("<br>");
			};
		};
	};
};

42.使用1块,2块,5块钱,凑出20块钱的所有可能;

for(var i=1;i<=20;i++){
	for(var o=1;o<=20;o++){
		for(var u=1;u<=20;u++){
			if(i*1+o*2+u*5==20){
				document.write("搭配方案有  :  "+i+"个1元....."+o+"个2元....."+u+"个5元");
				document.write("<br />");
			};
		};
	};
};

43.请使用代码在页面上显示下面表格效果

document.write("<table cellspacing=0> ")
for(var i=1;i<=4;i++){
	document.write("<tr>");
	for(var o=1;o<=4;o++){
		document.write("<td>");
		document.write("</td>");
	};
	document.write("</tr>");
};
document.write("</table>");

44.请使用代码实现,去掉一个最高分,去掉一个最低分之后求平均分是多少?

var a = Number(prompt("请输入人数"));
var fn = [];
var sum = 0;
for(var i=1;i<=a;i++){
	var b = Number(prompt("请依次输入分数"));
	fn[fn.length] = b;
};
for(var o=1;o<=fn.length-2;o++){
	sum+=fn[o];
};
var pj = sum/(fn.length-2);
document.write(pj);


45.设计一个函数,让用户输入一个数字,然后反转输出该数字   例:2891 -》 1982    

function fn(){
	var a = prompt("请输入数值");
	var b = 0.1;
	for(var i=1;i<a;i++){
		b*=10;
		var c = parseInt(a/b);
		if(c>0&&c<10){
			break;
		};
	};
	var sum = "";
	for(var o=1;o<=i;o++){
		var s = a%10;
		sum+=s;
		a=(a-s)/10;
	};
	console.log(sum);
};
fn();

46.写一个能获取10-20之间的随机数

console.log("10-20之间的随机数:"+Math.floor((Math.random()*11+10)));
console.log("10-20之间的随机数:"+Math.ceil((Math.random()*11+9)));

47.随机生成rgb的颜色

console.log("R为:"+Math.floor(Math.random()*256));
console.log("G为:"+Math.floor(Math.random()*256));
console.log("B为:"+Math.floor(Math.random()*256));

48.将当前的时间格式化输出,封装成一个函数完成此操作  格式:2021年12月8日,17时21分15秒

function fn(){
	var dt = new Date();
	var a = dt.getFullYear();
	var b = dt.getMonth();
	var c = dt.getDate();
	var d = dt.getHours();
	var e = dt.getMinutes();
	var f = dt.getSeconds();
	return a+"年"+b+"月"+c+"日"+","+d+"时"+e+"分"+f+"秒";
};
console.log(fn());

49.随便输入两个时间戳/毫秒值判断相差 天 时 分 秒

function fn1(a,b){
	var t,f,m,s; 
	var l = a - b;
	l/=1000;
	t = parseInt(l/60/60/24);
	s = parseInt(l/60/60-24*t); 
	f = parseInt(l/60-24*t*60-s*60); //
	m = parseInt(l-24*t*60*60-s*60*60-f*60);
	return {
		"天" : t,
		"时" : s,
		"分" : f,
		"秒" : m
	};
};
console.log(fn1(2000000000,19400));

50.截取字符串"我爱中华人民共和国",中的"中华"

// 1-方法
var sty1 = "abcoefoxyozzopp";
for(var e=0;e<sty1.length;e++){
	if(sty1[e]=="o"){
		console.log("o位置分别为"+e);
	};
};
// 2-方法
var sty = "abcoefoxyozzopp";
temp = sty.indexOf("o");
console.log(sty.replace("temp"," "));
for(var o=1;o<sty.length;o++){
	temp = sty.indexOf("o");
	if(sty.indexOf("o")!=-1){
		console.log("o出现的位置为"+temp);
		sty = sty.replace(sty[temp]," ");
	};				
};

51."abcoefoxyozzopp"查找字符串中所有o出现的位置

// 1-方法
var sty1 = "abcoefoxyozzopp";
for(var e=0;e<sty1.length;e++){
	if(sty1[e]=="o"){
		console.log("o位置分别为"+e);
	};
};
// 2-方法
var sty = "abcoefoxyozzopp";
temp = sty.indexOf("o");
console.log(sty.replace("temp"," "));
for(var o=1;o<sty.length;o++){
	temp = sty.indexOf("o");
	if(sty.indexOf("o")!=-1){
		console.log("o出现的位置为"+temp);
		sty = sty.replace(sty[temp]," ");
	};				
};

52.把字符串中所有的o替换成!

var sty2 = "abcoefoxyozzopp";
for(var e=0;e<sty1.length;e++){
	if(sty2[e]=="o"){
		sty2 = sty2.replace(sty2[e],"!");
	};
};
console.log(sty2);

53.判断一个字符串中出现次数最多的字符,统计这个次数

var s = 'abcoefoxyozzopp';
var obj = {};
for(var i=0;i<s.length;i++){
	var temp = s[i];
	if(obj[temp]){
		obj[temp]++;
	}else{
		obj[temp] = 1;
	};
};
console.log(obj)
var max = 0;
var temp;
for(var u in obj){
	if(obj[u] > max){
		max = obj[u];
		temp = u;
	};
};
console.log("出现次数最多是"+temp+"出现次数为"+max);

54.将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现

var arr = ["刘备","张飞","关羽" ];
console.log(arr.join("|"));

var sum="";
for(var i=0;i<arr.length-1;i++){
	sum+=arr[i]+"|"; //刘备|张飞
};
console.log(sum+arr[arr.length-1]);

55.将字符串数组的元素的顺序进行反转。["a", "b", "c", "d"] -> [ "d","c","b","a"]
使用两种种方式实现。提示:第i个和第length-i-1个进行交换

var arr1 = [1,2,3,4,5,6,7,8];
console.log(arr1.reverse());

var arr2 = [1,2,3,4,5,6,7,8];
var temp;
//var a = 1
for(var i=0;i<arr2.length-4;i++){
	temp =  arr2[i]
	arr2[i] = arr2[arr2.length-i-1]
	arr2[arr2.length-i-1] = temp
	//a++
}
console.log(arr2)

56.数组[1500, 1200, 2000, 2100, 1800],把超过2000的删除

// 方法-1
var arr3 = [1500, 1200, 2000, 2100, 1800];
var resalt = arr3.filter(function(a,b,c){
	return a <= 2000;
})
console.log(resalt)
// 方法-2
var arr3 = [1500, 1200, 2000, 2100, 1800];
for(var i=0;i<arr3.length;i++){
	if(arr3[i] > 2000){
		arr3.splice(i,1)
	}
}
console.log(arr3)
// 方法-3
var arr = [1500, 1200, 2000, 2100, 1800];
	// var arr1=[];
	var resule = arr.forEach(function(ele,index){
		if(ele>2000){
			arr.splice(index,1)
		}
	});
console.log(arr);

57.["c", "a", "z", "a", "x", "a"]找到数组中每一个a出现的位置

// 方法-1
var arr4 = ["c", "a", "z", "a", "x", "a"];
for(var i=0;i<arr4.length;i++){
	if(arr4[i] == "a"){
		console.log("a出现的位置有"+i)
	}
}
// 方法-2
var arr4 = ["c", "a", "z", "a", "x", "a"];
for(var i=0;i<arr4.length;i++){
	if(arr4.indexOf("a") != -1){
		console.log("a出现的位置"+arr4.indexOf("a"))
		arr4.splice(arr4.indexOf("a"),1," ")			
	};
};

58.编写一个方法去掉一个数组的重复元素

// 方法一
var arr5 = [1,5,6,5,9,7,7,7,7,7,7];
for(var u=0;u<arr5.length;u++){
	for(var v=0;v<arr5.length;v++){
		if(u!=v){
			if(arr5[u] == arr5[v]){
				arr5.splice(v,1," ");
			};
		};	
	};
};
console.log(arr5)
arr5 = arr5.filter(function(ele,index,array){
	return ele != " ";
});
console.log(arr5);

// 方法二
var arr5 = ["a","b","a","c","g","e","e","e","e","e","e"];
var obj = {};
for(var v=0;v<arr5.length;v++){
	var temp = arr5[v];
	if(obj[temp]){
	}else{
		obj[temp] = 1;
	};
};
arr5 = []
for(var ey in obj){
	arr5[arr5.length] = ey;
};
console.log(arr5);

// 方法三
var array = [1,3,1,6,6,7,9,5,3,6,6];
var arr = [];
for(var o = 0;o<array.length;o++){
if(arr.indexOf(array[o])==-1){
//	arr[arr.length] = array[o];
	arr.push(array[o]);
};
};
console.log(arr);

59.判断输入的一个11位数的电话号码...要求是前3位是"010"
然后跟着一个"-"...后面剩余个数都是数字

var pro = prompt("请输入电话号码");
if(pro.substr(0,4) == "010-"  && pro.substr(4).length == 8 && !isNaN(pro.substr(4))){
	console.log("这是一个电话号码");
}else{
	console.log("这不是一个电话号码");
};

以上就是前端经常会遇到的55道程序题,当你将其全部搞懂后,于你而言绝对是一个实质性的帮助,对于后期去写那些逻辑思维题时也能够头脑清晰的去解决。

希望能够有所帮助!

;