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

文章目录


第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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值