程序员必做50题的解答(完结撒花)分解质因数输出9*9口诀国际象供棋盘兔子判断101-200之间有多少个素数水仙花数条件运算符求其最大公约数和最小公倍数字符的个数打印出杨辉三角形有n个人围成一圈,顺序

本文列举并详细解答了45个编程挑战,涵盖质因数分解、九九乘法表、国际象棋棋盘、斐波那契兔子问题、素数判断等算法题目。通过这些挑战,读者可以加深对编程逻辑和算法的理解,适合初级到中级程序员练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


第7-45题


写完才发现50题只有45道,终于写完啦!!!最后还是附了1-6题,所以是个大合集~

第7题:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

1.代码

var n=90,m=n
var a=n+'='
for(var i=2;i<=m;i++){
	if(m%i == 0){//遍历比输入数小的每一个数,从最小的质数开始累乘
		a+=i.toString()+'*'
		m=m/i		
		i=1
	}	
}
//最后会多个'*',将字符串转为数组,去掉最后一个字符再转为字符串打印
var arr=a.split('')
arr.splice(-1)
a=arr.join('')
console.log(a)

2.结果展示
在这里插入图片描述

第8题:输出9*9口诀。

1.代码

//两个for循环,一个管行,一个管列
for(var i=1;i<=9;i++){
	//三角形的形成原因是j的范围
	for(var j=1, a='';j<=i;j++){
		a+=j+'*'+i+'='+(i*j)+' '
	}
	console.log(a)
}

2.结果展示

在这里插入图片描述

第9题:要求输出国际象供棋盘。

1.代码

for(i=1;i<=8;i++){
	var a=''
	for(j=1;j<=8;j++){
		//注意这里,如果直接用j的值计算就没有交替现象了,i就是改变奇偶性的
		if((j+i)%2===0){
			a+='■'
		}else{
			a+= '□'
		}
		
	}
	console.log(a)
}

2.结果展示
在这里插入图片描述

第10题:古典问题:有一对兔子,从出生后第3个月起每个月都生一-对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1.代码

function fib(n){
	if(n==1 ||n==2){
		return 1
	}
	return fib(n-2)+fib(n-1)
}
console.log(fib(10))

2.结果展示
在这里插入图片描述
3.注意
我没在函数里写console,记得调用函数

第11题:判断101-200之间有多少个素数,并输出所有素数。

1.代码

var a=0
for(var prime=101;prime<=200;prime++){
//声明变量保存统计的因数的个数
	var count=0
	for(i=1;i<=parseInt(prime/2);i++){
	if(prime%i===0){
	//遍历小于n的数,如果n除以这个数i能整除,就给count+1
		count++
	}
}
//如果count数等于1,说明遍历过小于n/2的所有数后这个数只有1一个因数
	if(count===1){
	//此时这个数是质数,除数这个质数
		console.log(prime)
		//统计质数个数
		a++
	}
	
}
console.log(a)

2.结果展示
在这里插入图片描述

3.注意
注意质数是指除了1和它本身没有其他因数的数,因为n的因数最大不会超过它的一半,所以我用n/2,不用遍历到它本身,大概可以省点时间?
这题其实可以从2开始算,这样判断count为0比较好理解,我这方法有点笨了

第12题:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”, 因为153=1 的三次方+5的三次方+3的三次方

1.代码

for(num=100;num<1000;num++){
	var a =parseInt(num/100)//百位
	var b =parseInt((num%100)/10)//十位
	var c =num%10//个位
	if(a*a*a+b*b*b+c*c*c===num){
		console.log(num+'是水仙花数')
	}
}

2.结果展示
在这里插入图片描述

第13题:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89 分之间的用B表示,6 0分以下的用C表示。

1.代码

var score=10
if(score<0 || score>100){
	console.log('非法成绩')
}
else if(score>=90){
	console.log('A')
}
else if(score>=60){
	console.log('B')
}
else{
	console.log('C')
}
	

2.结果展示
在这里插入图片描述

第14题:输入两个正整数m和n,求其最大公约数和最小公倍数

1.代码

//输入两个正整数m和n,求其最大公约数和最小公倍数
var m=11
var n=22
var a=0
var b=0
if(m<n){
	a=m
	m=n
	n=a
}
var arr1=[]
var arr2=[]
var arr3=[]
var j=0,k=0,l=0
//遍历求得m的所有因数存在arr1中
for(i=1;i<=m;i++){
	if(m%i==0){
		arr1[j]=i
		j++
	}
}
//遍历求得n的所有因数存在arr2中
for(b=1;b<=n;b++){
	if(n%b==0){
		arr2[k]=b
		k++
	}
}
//找到arr1和arr2中相同公因数,存在arr3中
for(a=0;a<arr1.length;a++){
	for(i=0;i<arr2.length;i++){
		if(arr1[a]==arr2[i]){
			arr3[l]=arr1[a]
			l++
		}
	}
}
console.log(m+'和'+n+'的最大公因数为:'+arr3[arr3.length-1])
//将mn直接相乘再除以arr3中所有值的积即可得到最小公倍数(数学问题)
for(i=0;i<arr3.length;i++){
	a=(m*n)/arr3[i]
}
console.log(m+'和'+n+'的最小公倍数为:'+a)

2.结果展示
在这里插入图片描述

3.注意
这题我写的变量用的很乱,但是思路比较简单,写完有点久了懒得改了,就先凑合着吧,这方法还笨得很,大家踊跃思考,欢迎交流呀~

第15题:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

1.代码

var str='0fewofho0234l%^$'
var arr=[]
var alpha=0,space=0,num=0,chars=0  //声明变量保存要计算的值得数量
for(var i=0;i<str.length;i++){
	arr[i]=str.charAt(i)  //charAt,依次取出字符
}
//下面的判断条件就是字符对应的ASCII码
for(i=0;i<arr.length;i++){
	if(arr[i].charCodeAt()===32){
		space++
	}else if(arr[i].charCodeAt()>=65 && arr[i].charCodeAt()<=90 ||arr[i].charCodeAt()>=97 && arr[i].charCodeAt()<=122){//英文字母范围
		alpha++
	}else if(arr[i].charCodeAt()>=48 && arr[i].charCodeAt()<=57){
		num++
	}else{
		chars++
	}
}
console.log('英文字母有:'+alpha+'  空格有'+space+'  数字有:'+num+'  其他字符有:'+chars)
console.log(arr[0],typeof arr[0],arr[0].charCodeAt())

2.结果展示
在这里插入图片描述

3.注意
也可以用charAt(),比较字符0-9,a-z,但是对于空格和特殊符号比较麻烦,所以我还是更喜欢用ascii码

第16题:求s=a+aa+aaa+aaa+…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制

1.代码

var a=7
var arr=[]
var sum=0
for(var i=0,b=2,c='';i<a;i++){
	//将每一个加数保存在数组中
	c = (b).toString()+c
	arr[i]=c
	console.log(arr[i])
}
for(i=0,str='';i<arr.length;i++){
	str+=arr[i]+'+'//获得前面的字符串
	sum+=Number(arr[i])//得到最终结果
}
//将字符串转为数组去掉最后的加号再转回字符串
var arr1=str.split('')
arr1.splice(-1,1) 
str=arr1.join('')
console.log(str+'='+sum)

2.结果展示
在这里插入图片描述

3.注意
这里可以用函数封装起来,做之前还没看函数封装部分,我懒,学了后不想改了

第17题:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

1.代码

var arr=[]
for(var a=1;a<=1000;a++){
	for(var i=1,j=0;i<a;i++){   
		if(a%i===0){		//把每个数对应的因数存在数组arr中
			arr[j]=i
			j++
		}
	}
	for(i=0,sum=0;i<arr.length;i++){
		sum+=arr[i]		//计算这个数因数之和
	}
	//判断是否为完数
	if(a===sum){
		console.log(a)
	}
	arr.length=0   //清空数组中的值,继续寻找
}

2.结果展示
在这里插入图片描述

3.注意
一定要记得每次清空数组,否则前面因数数量>后面因数的数量时,有部分值无法被覆盖,会导致运算结果错误

第18题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

1.代码

for(var i=1,h=100,s=0;i<=10;i++){
	s+=2*h
	h/=2
//	console.log(h)
}
s=s-100-h
console.log(h,s)

2.结果展示
在这里插入图片描述

第19题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早.上又将剩下的桃子吃掉-一半,又多吃了一个。以后每天早上都吃了前一一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一一个桃子了。求第一天共摘了多少。

1.代码

function fn(n){
	if(n===1){
		return 1
	}
	return (fn(n-1)+1)*2
}
console.log(fn(10))

2.结果展示
在这里插入图片描述

3.注意
递归最重要的就是条件啦,这里虽然它第10天是剩1个桃,但本质上还是每天吃一半零1个的重复,10是个计数作用,所以我这边算的时候是反着算的,于题目有些含义上的不符,觉得不合适的可以改一下条件
但是我觉得我这个可以算更多天,比如这个吃法吃了12天,那么第一天多少桃,直接传参12就好,所以看个人理解啦

第20题:两个乒乓球队进行比赛,各出三人。甲队为ab,c三人,乙队为xy;z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

1.代码

var x='x'.charCodeAt()
var y='y'.charCodeAt()
var z='z'.charCodeAt()//找出x,y,z的ascii码依次遍历
for(var i=x;i<=z;i++){
	for(var j=x;j<=z;j++){
		for(var k=x;k<=z;k++){
			if(i==x ||i==j|| k==x || k==z || i==k ||j==k){//ijk之间也不能相等,不能自己和自己比
				continue
			}
			//将ASCII转为字母
			console.log( 'a的对手是:'+String.fromCharCode(i) )
			console.log( 'b的对手是:'+String.fromCharCode(j) )
			console.log( 'c的对手是:'+String.fromCharCode(k) )
		}
	}
}

2.结果展示
在这里插入图片描述

第21题:有一分数序列: 2/1, 3/2, 5/3, 8/5,13/8, 21/13… 求出这个数列的前20项之和。

1.代码

function fn(n){
	let a=2
	let b=1
	let sum=0
	//第一个数单独考虑
	if(n==1){
		return sum += a/b
	}else{
		//后面的每一个数的分母都是前一个数的分子,分子是前一个数的分子分母之和
		for(let i=2;i<=n;i++){
		let t=a
		a=a+b
		b=t
		sum += a/b
	}
	}	
	//因为第一个数单独考虑,所以如果数列项数大于等于2项时,要加上第一个数的数值
	return sum+2
}
console.log(fn(20))

2.结果展示
在这里插入图片描述

3.注意
n=1时,要用return,否则后面的代码顺序执行,会出现错误
另外健壮性不够.
需考虑负数,0,非数值型数据,后面的程序也都有此问题,再添加判断即可
这里为了图快,类似的代码没有写

第22题:求1+2!+3!+…+20!的和。

1.代码

sum=0
for(j=1;j<=20;j++){
	//每次都要给s的值置1,防止叠加错乱
	var s=1
	for (var i=1;i<=j;i++){
		//算这个数的阶乘
		s*=i
		console.log(s)
	}
	sum+=s
}
console.log(sum)

2.结果展示
在这里插入图片描述

第23题:利用递归方法求5!。

1.代码

function fn(a){
	if(a===1){
		return 1
	}
	return fn(a-1)*a
}
console.log(fn(5))

2.结果展示
在这里插入图片描述

第24题:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

1.代码

function fn(a){
	if(a.length===1){
		return a
	}
	// 计数+slice截取字符串并返回截取的部分
	return a.charAt(a.length-1)+fn(a.slice(0,a.length-1))//从后往前取字符串,
}
var a='abcdef'
console.log(fn(a))

2.结果展示
在这里插入图片描述

第25题:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

1.代码

function fn(a){
	if(a===1){//第一个人10岁
		return 10
	}
	return fn(a-1)+2//本人比上一个大2岁
}
console.log( '第5个人'+fn(5)+'岁' )

2.结果展示
在这里插入图片描述

第26题:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

1.代码

function fn(num){
	var num=String(num)//数值转为字符串
	arr=num.split('')//将字符串转为数组
	var revnum=arr.reverse()//翻转数组API
	console.log(`${num}${arr.length}位数,逆序打印各位数字是${revnum}`)	
}
fn(12146786159)

2.结果展示
在这里插入图片描述

3.注意
测试的时候数字打多了,不影响

第27题:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同

1.代码

function fn(num){
	var arr=String(num).split('')
	var revnum=Number(arr.reverse().join(''))
	//回文数对称,所以数值全部翻转,即可将原来的个位与万位比较
	//因为是数值,所以直接比较大小即可
	if(num===revnum){
		console.log( num+'是回文数' )
	}else{
		console.log( num+'不是回文数' )
	}
}
fn(12344321)

2.结果展示
在这里插入图片描述

第28题:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样, 则继续判断第二个字母

//Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
//77 84 87 84 70 83 83
1.代码

var d=prompt('请输入星期的第一个字母:')
var s=d.charCodeAt()//charCode只识别第一个字母,所以只关注输入的第一个字母即可
//alert(s)
if(s>=97 || s<=122){//小写字母转为大写字母
	s-=32
	//alert(s)
}
//65-90   32
switch(s){
	case 77:
		alert('星期一')
	break
	case 84:
		var k=prompt('请输入星期的第二个字母:')
		var k=k.charCodeAt()
		if(k>=97 || k<=122){//小写字母转为大写字母
			k-=32
		}
		if(k==85){
			alert( '星期二' )
		}else if(k==72){
			alert( '星期四' )
		}else{
			alert( '非法输入,请您重新输入' )
		}		
	break
	case 87:
		alert('星期三')
	break
	case 70:
		alert('星期五')
	break
	case 83:
		var k=prompt('请输入星期的第二个字母:')
		var k=k.charCodeAt()
		if(k>=97 || k<=122){//小写字母转为大写字母
			k-=32
		}
		if(k==65){
			alert( '星期六' )
		}else if(k==85){
			alert( '星期天' )
		}else{
			alert( '非法输入,请您重新输入' )
		}	
	break
	default:
	alert( '非法输入,请您重新输入' )
}

网页代码:

<script src="28.js" charset="utf-8"></script>

2.结果展示
在这里插入图片描述

3.注意
这里懒得改了,所以把网页代码也敲进去,记得要在网页打开,别用控制台哦
这里用ascii码做为case的选择判定

第29题:对10个数进行排序。

1.代码
API

var arr=[1,23,5,67,78,97,22,13,9,8]
arr.sort( (a,b)=>a-b )
console.log(arr)

//for循环,冒泡排序

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 a=arr[j]
			arr[j]=arr[j+1]
			arr[j+1]=a
		}
	}
}
console.log(arr)

2.结果展示
在这里插入图片描述

3.注意
排序方式太多啦,没事练练手也好

第30题:求一个33矩阵对角线元素之和。(nn阶计算方法相同)

1.代码

var arr=[[2,2,3],		//00,01,02   辅助寻找规律
		 [4,5,6],		//10,11,12
		 [7,8,9]]		//20,21,22
var sum1=0
var sum2=0
for(var i=0;i<arr.length;i++){
	for(var j=0;j<arr.length;j++){
		//下标相同的下对角线
		if(i===j){
			sum1 += arr[i][j]
		}
		//下标和相等且等于长度-1的上对角线
		if( (i+j) == arr.length-1){
			sum2 += arr[i][j]
		}
	}
}
console.log(sum1+sum2)

2.结果展示
在这里插入图片描述

第31题:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

1.代码

var arr=[1,2,3,4,5,7,8,9,10,11]
var n=-6
var a=0
//尾插法
	if(arr[0]>n){//判断是否比第一个值小,小于第一个值就替换第一个值的位置
		a=arr[0]
		arr[0]=n
		n=a
	}
arr[arr.length]=n
for(var i=0;i<arr.length;i++){
	var k=arr[arr.length-1]//暂存最后一个元素的值,因为要进行交换
	if(k>=arr[i] && k<=arr[i+1]){//正好在两者之间时的位置
		for(var j=i+1;j<arr.length;j++){//j从交换后的位置开始计算
		a=arr[j]
		arr[j]=arr[arr.length-1]
		arr[arr.length-1]=a
		}
	}
}
console.log(arr)

2.结果展示
在这里插入图片描述

3.注意
这里用排序API两行代码就出来了,我傻…当时没想到
这里要注意尾插法如果第一个比插入的值还要大的话,就需要额外考虑,我这里是直接做了个交换

第32题:将一个数组逆序输出

1.代码

var arr=[1,2,3,4,5,6,7]
//数组转为字符串
arr=arr.reverse()//翻转数组API
console.log(arr)

2.结果展示
在这里插入图片描述

3.注意
API时刻谨记,真好用呀

第33题:打印出杨辉三角形

1.代码

function fn(n){
	//创建数组对象
	n=n-1
	var arr=[]
	for(i=0;i<=n;i++){
		arr[i]=new Array()
		for(var j=0;j<=i;j++){
			if(j==0 || j==i){
				arr[i][j]=1
			}else{//上面的条件自动筛除了第1,2行
				arr[i][j]=arr[i-1][j-1]+arr[i-1][j]
			}
		}	
	}
	for(var i=0;i<n;i++){
		var b=''
		for(var j=0;j<parseInt((n-i+1)/2);j++){//+1只是为了让三角形第一行的位置好看一丢丢,虽然还是不好看
			b+=' '
		}
		//逐行打印
		console.log(b+arr[i])
	}
}
fn(20)

2.结果展示
在这里插入图片描述

第34题:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

1.代码

var arr=[12,134,11,4,65,76,8,9,111,10]
var max=arr[0]
var min=arr[0]
for(var i=0;i<arr.length;i++){//最大的与第一个元素交换
	if(max<arr[i]){
		max=arr[i]
		arr[i]=arr[0]
		arr[0]=max
	}
}
for(var j=0;j<arr.length;j++){//最小的与最后一个元素交换
	if(min>arr[j]){
		min=arr[j]
		arr[j]=arr[arr.length-1]
		arr[arr.length-1]=min		
	}
}
console.log(arr)

2.结果展示
在这里插入图片描述
3.注意:
我这里因为得到一个相对最大(小)值就与开头(结尾)元素进行了交换,所以不仅改变了最大最小和第一个最后一个的位置,中间部分元素也会发生变动,
这里题目没硬性规定其他元素位置
如果想不变动,可以用一个变量存一下最大(小)值的坐标,全部遍历结束后再交换

第35题:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

1.代码

var arr=[1,2,3,4,5,6,7,8,9]
function fn(m){
	var arr1=arr.splice(-m)//返回被截掉的数
	var arr2=arr1.concat(arr)//将返回的数拼接的剩余数的前面
	console.log(arr2)
}
fn(5)

2.结果展示
在这里插入图片描述

第36题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

1.代码

function fn(n){
	var arr=[]
	var a=0
	for(var i=0;i<n;i++){
		//几个人玩就将几个人从1开始放入数组,可以对应自己的号数
		arr[i]=i+1
	}
	//如果数组值为1,也就是剩余人数不为1,一直执行
	while(arr.length!==1){
		for(var count=1;count<=3;count++){
			//逢3删除数组开头的一个元素
			if(count==3){
				arr.shift()
			}
			a=Number(arr.splice(0,1))//取第一个元素放入变量a中
			arr.push(a)//将a压入数组最后一个元素,完成循环			
		}
		
	}
	console.log(`留下的是原来第${arr[0]}的那位`)
}
fn(10)

2.结果展示
在这里插入图片描述

第37题:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

1.代码

function main(str){
	console.log(str.length)
}
main('gfuiheow')

2.结果展示
在这里插入图片描述

第38题:编写一个函数,输入n为偶数时,调用函数1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n

1.代码

function fn(n){
	var sum=0
	var str=''
	if(n%2===0){//n为偶数时
		for(var i=2;i<=n;i++){
			if(i%2===0){//分母都是2的倍数
				str += (`1/${i}`)+'+'
				sum += 1/i
			}
			
		}
	}else{//n为奇数时
		for(var i=1;i<=n;i++){
			if(i%2!==0){
				str += (`1/${i}`)+'+'
				sum += 1/i
			}
			
		}
	}	
	var arr=str.split('')
	arr.splice(-1)
	str=arr.join('')//去掉最后一个加号
	console.log(str+'='+sum)
}
fn(10)

2.结果展示
在这里插入图片描述

第39题:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分为五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

1.代码

for(var i=0;;i++){
	var tao1=i
	if(tao1%5==1){
		var tao2=tao1-1-(tao1-1)/5
		if(tao2%5==1){
			var tao3=tao2-1-(tao2-1)/5
			if(tao3%5==1){
				var tao4=tao3-1-(tao3-1)/5
				if(tao4%5==1){
					var tao5=tao4-1-(tao4-1)/5
					if(tao5%5==1){
						console.log(`海滩上原来最少有${tao1}个桃子`)
						break;
					}
				}
			}
		}
	}
}

2.结果展示
在这里插入图片描述

3.注意
我觉得这题可以用递归,但是我没想明白,烦请大佬指教
我知道这样做很呆,但是别的我都不理解

第40题:809*??=800*??+9*??+1其中??代表的两位数.8*??的结果为2位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果

1.代码

var a=0
for(var i=1;i<=9;i++){
	for(j=0;j<=9;j++){
		a=10*i+j
		//console.log(a)
		if((8*a>=10&&8*a<100) && (9*a>=100&&9*a<1000)){
			console.log(`两位数是:${a}`)
			console.log(`809*${a}的结果是:${a*809}`)
		}
	}
}

2.结果展示
在这里插入图片描述

3.注意
这个+1我不能理解,+1后这个数就不存在啦,数学上感觉是不通的,不知道哪位高人可以给指点一下不

第41题:八进制转换为十进制

1.代码

var a=123456
a=a.toString()
var arr=a.split('')
var sum=0
for(var i=0;i<arr.length;i++){
	//用当前位置上的数*8的数位-1次方
	sum += Number(arr[i])*(8**(arr.length-i-1))
}
console.log(sum)

2.结果展示
在这里插入图片描述

第42题:求0——7所能组成的奇数个数。

1.代码

var count=0
for(var a=0;a<=7;a++){
	for(var b=0;b<=7;b++){
		for(var c=0;c<=7;c++){
			for(var d=0;d<=7;d++){
				for(var e=0;e<=7;e++){
					for(var f=0;f<=7;f++){
						for(var g=0;g<=7;g++){
							for(var h=0;h<=7;h++){
								var str=a,b,c,d,e,f
								var num=Number(str)
								if(a%2===0){
									count++
								}								
							}
						}
					}
				}
			}
		}
	}
}
console.log(count)

2.结果展示
在这里插入图片描述

3.注意
0打头的数字也不会影响计算,所以直接组合算就可以啦

第43题:一个偶数总能表示为两个素数之和。

1.代码

var a=[]
var count=0
function fn(n){
	if(i<4){
		return console.log('非法的数')
	}
	if(n%2!==0){
		return console.log(n+'不是偶数')
	}	
	/***********************************/
	for(var i=2;i<=n;i++){//1不是素数,所以从2开始
	count=0
		for(var j=2;j<i;j++){//求出小于n的所有素数
			if(i%j===0){
				count++
			}		
		}
		if(count==0){//将小于n的所有素数压入数组
			a.push(i)
			}
		}
	/*遍历数组,找到和为n的两个素数*/
	for(var i=0;i<a.length;i++){
		for(var j=i;j<a.length;j++){
			if( a[i]+a[j]==n ){
				console.log(a)
				console.log(`${a[i]}+${a[j]}=${n}`)
			}
		}
	}
	
}
fn(18)

2.结果展示
在这里插入图片描述

3.注意
2是最小的素数,且为偶数,所以单独考虑,对非法数的判断从4开始

第44题:判断一个素数能被几个9整除

1.代码

function fn(n){
	var str=''
	if(typeof(n)!='number' || n==0 ||n==1){
		return console.log(n+'是非素数')
	}	
	if(n===2){
		return console.log(n+'不能被9整除')
	}	
	//从2开始判断素数,所以对2单独考虑
	for(var i=2;i<n;i++){
		//先判断这个数是不是素数
		if(n%i===0){
			return console.log(n+'不是素数')
		}
	}
	for(var j=1;j<=20;j++){
		str += '9'//从9到20个9			
		if(Number(str)%n===0){
			return console.log(n+'能被'+str.length+'个9整除')
		}
	}
console.log('20个9仍不能整除'+n)			
}
fn(1)
fn(2)
fn(0)
fn(97)
fn('abc')

2.结果展示
在这里插入图片描述

第45题:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加.上5,然后用和除以10的余数代替该数字,再将第1位和第四位交换,第二位和第三位交换。

1.代码

function fn(pwd){
	var str=pwd.toString()
	var arr=str.split('')
	var arr1=[]
	var arr2=[]
	var j=0
	var k=0
	for(var i=0;i<arr.length;i++){
	arr1[j] = Number(arr[i])+5 //每个数字+5		
	arr2[k]=arr1[j]%10			//除以10取余
	j++
	k++//加完后k后移,对应位置没有值
	}
	//交换1,4位置
	k=arr2[0]
	arr2[0]=arr2[3]
	arr2[3]=k
	//交换2,3位置
	j=arr2[1]
	arr2[1]=arr2[2]
	arr2[2]=j
	str=arr2.join('')
	console.log(str)//以字符串格式输出	
}
fn(6789)

2.结果展示
在这里插入图片描述

1-6前面有分开写,为了方便查阅,这里只展示代码,略详细的翻一下前面的博客吧

第1题:1,2,3,4组成不同不重复的三位数

for(var i=1;i<5;i++){
	for(var j=1;j<5;j++){
		for(var k=1;k<5;k++){
			if(i!=j && i!=k && j!=k){
			console.log(i,j,k)}
		}
	}
}

第2题:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20 万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?

var salary = 1000001
var bonus=0
if(salary<100000){
	bonus=salary*0.1
}
else if(salary>=100000 && salary<200000){
	bonus=(salary-100000)*0.075+100000*0.1
}
else if(salary>=200000 && salary<400000){
	bonus=100000*0.075+100000*0.1+(salary-200000)*0.05
}
else if(salary>=400000 && salary<600000){
	bonus=100000*0.075+100000*0.1+200000*0.05+(salary-400000)*0.03
}
else if(salary>=600000 && salary<1000000){
	bonus=100000*0.075+100000*0.1+200000*0.05+400000*0.03+(salary-600000)*0.015
}
else{
	bonus=100000*0.075+100000*0.1+200000*0.05+400000*0.03+600000*0.015+(salary-1000000)*0.01
}
console.log(bonus)

第3题:一个整数,它加上100后是一-个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

for(var i=1;i<=100000;i++){
	var a = parseInt(Math.sqrt(i+100))
	var b = parseInt(Math.sqrt(i+168))
	if(a*a==(i+100) && b*b==(i+168)){
		console.log(i)
	}
}

第4题:输入某年某月某日,判断这一天是这一年的第几天?

var year =2000 ,month=3, day=7,days=0
var monthday=[31,28,31,30,31,30,31,31,30,31,30,31]
for(var i=0;i<month-1;i++){
	days+=monthday[i]
}
days+=day
if(month>2 &&(year%4==0&&year%100!=0 || year%400==0)){
	days++
}
console.log(`${year}${month}${day}日是这一年的第${days}`)

第5题:输入三个整数x,y,z,请把这三个数由小到大输出。

var x = 2
var y = 1
var z = 3
var a=0;
if(x>y){
	a=x
	x=y
	y=a
}
if(x>z){
	a=x
	x=z
	z=a
}
if(y>z){
	a=y
	y=z
	z=a
}
console.log(x,y,z)

第6题:用*号输出字母C的图案。

for(var i=1;i<6;i++){
	var a = ''
	if(i==1 || i==5){
		for(var j=1;j<5;j++){ 
			a+='* '
		}
	}else{
		a='* '
	}
	console.log(a)
}

总结

欢迎指正与建议

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值