文章目录
1. 阶乘
例题:
分别使用 while / do-while / for 循环实现10的阶乘(使用递归算法)。
(1)while循环
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>阶乘</title>
</head>
<body>
<!-- while循环实现10的阶乘 -->
<script>
var result=1;
var i=1;
while(i<=10){
result = result*i; //递归算法
i++;
}
// 打印结果
document.write("10! = "+result);
</script>
</body>
</html>
(2)do-while循环
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>阶乘</title>
</head>
<body>
<!-- do-while循环实现10的阶乘 -->
<script>
var result=1;
var i=1;
do{
result = result*i; // 递归算法
i++;
}while(i<=10)
// 打印结果
document.write("10! = "+result);
</script>
</script>
</body>
</html>
(3)for循环
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>阶乘</title>
</head>
<body>
<!-- for循环实现10的阶乘 -->
<script>
var result=1;
for(var i=1;i<=10;i++){
result = result*i; // 递归算法
}
// 打印结果
document.write("10! = "+result);
</script>
</body>
</html>
2. 九九乘法表
例题:
打印九九乘法表(四种形式)
使用不同的方法打印出九九乘法表的四种形式
(1)for循环
1)正三角
<script>
// 使用for循环打印
for(var j=1;j<=9;j++){
for (var i=1;i<=j;i++) {
// 打印 使乘法表对齐
document.write(i+"*"+j+"="+i*j+(i*j<10?" ":" "));
}
document.write("<br>");
}
</script>
2)倒三角
<script>
// 使用for循环打印
for(var j=9;j>=1;j--){
for (var i=1;i<=j;i++) {
document.write(i+"*"+j+"="+i*j+(i*j<10?" ":" "));
}
document.write("<br>");
}
</script>
3)反三角
<script>
for(var j=1;j<=9;j++){
for (var i=j;i>=1;i--) {
document.write(i+"*"+j+"="+i*j+(i*j<10?" ":" "));
}
document.write("<br>");
}
</script>
4)倒反三角
<script>
for(var j=9;j>=1;j--){
for (var i=j;i>=1;i--) {
document.write(i+"*"+j+"="+i*j+(i*j<10?" ":" "));
}
document.write("<br>");
}
</script>
(2)table方法
1)正三角
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
html{
font-family: monospace;
font-size: 16px;
}
</style>
</head>
<body>
<script>
document.write("<table width='45%' border='0'>");
var j=1;
while(j<=9){
document.write("<tr>");
// 控制上下翻转
var i=1;
while(i<=j){
document.write("<td>"+i+"*"+j+"="+j*i+"</td>");
i++;
}
document.write("</tr>");
j++;
}
document.write("</table>");
</script>
</body>
</html>
2)反三角
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
html{
font-family: monospace;
font-size: 16px;
}
</style>
</head>
<body>
<script>
document.write("<table width='45%' border='0'>");
var j=1;
while(j<=9){
document.write("<tr>");
// 每一行前面的空格数
var n=9;
while(n>=j) {
document.write("<td> </td>");
n--;
}
// 控制上下翻转
var i=j;
while(i>=1){
document.write("<td>"+i+"*"+j+"="+j*i+"</td>");
i--;
}
document.write("</tr>");
j++;
}
document.write("</table>");
</script>
</body>
</html>
3)倒三角
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
html{
font-family: monospace;
font-size: 16px;
}
</style>
</head>
<body>
<script>
document.write("<table width='45%' border='0'>");
var j=9;
while(j>=1){
document.write("<tr>");
var i=1;
while(i<=j){
document.write("<td>"+i+"*"+j+"="+j*i+"</td>");
i++;
}
document.write("</tr>");
j--;
}
document.write("</table>");
</script>
</body>
</html>
4)倒反三角
<script>
document.write("<table width='45%' border='0'>");
var j=9;
while(j>=1){
document.write("<tr>");
// 每一行前面的空格数
var i=9;
while(i>=j) {
document.write("<td> </td>");
i--;
}
// 控制上下翻转
var i=j;
while(i>=1){
document.write("<td>"+i+"*"+j+"="+j*i+"</td>");
i--;
}
document.write("</tr>");
j--;
}
document.write("</table>");
</script>
3. 排列组合
例题:
有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
(1)三重for循环方法
<script>
var result=0;
var count=0;
// 使用三重for循环,使组成的三位数无重复
for (var i = 1;i<=4; i++) {
for(var j=1;j<=4;j++){
for(var k=1;k<=4;k++){
// i j k互不相同
if (i!=j && i!=k && j!=k) {
result=i*100+j*10+k;
count++;
document.write(result);
document.write("<br>");
}
}
}
}
document.write("共有"+count+"个符合条件三位数");
</script>
(2)拆分法
<script>
var result=0;
var count=0;
var a=0;
var b=0;
var c=0;
// 遍历所有可能符合条件的三位数
for(var n=111;n<=444;n++){
// 得到每个三位数个位、十位、百位上的数
a=parseInt(n/100);
b=parseInt(n%100/10);
c=n%100%10;
// 控制个十百位数的范围
if (b>=1 && b<=4 && c>=1 && c<=4) {
if (a!=b && a!=c && b!=c) {
result=a*100+b*10+c;
count++;
document.write(result);
document.write("<br>");
}
}
}
document.write("共有"+count+"个符合条件三位数");
</script>
4. 素数
例题:
判断 101-200 之间有多少个素数,并输出所有素数(只能被 1 和它本身整除的自然数为素数)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>素数</title>
</head>
<body>
<script>
var count=0;
for(var n=101;n<=200;n++){
// i为n所有可能的因数
for(var i=2;i<n;i++){
// 如果找到了其他因数,则n不是素数,判断下一个n
if(n%i==0){
break;
}
// 如果没有找到n的其他因数,则n为素数
if(i==(n-1)){
count++;
document.write(n);
document.write("<br>");
}
}
}
document.write("共有"+count+"个素数");
</script>
</body>
</html>
5. 水仙花数
例题:
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个“水仙花数”,因为 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水仙花数</title>
</head>
<body>
<script>
for(var n=100;n<=999;n++){
var a=0;
var b=0;
var c=0;
// 分别获取三位数个十百位上的数
a=parseInt(n/100);
b=parseInt(n%100/10);
c=n%100%10;
if(n==a*a*a+b*b*b+c*c*c){
document.write(n);
document.write("<br>");
}
}
</script>
</body>
</html>
6. 分解质因数
例题:
将一个正整数分解质因数。例如:输入 90,打印出 90 = 2 * 3 * 3 * 5
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>质因数</title>
</head>
<body>
<!-- 设置输入框 -->
<input type="text" id="one">
<button type="button" onclick="zhi()">分解质因数</button>
<script>
function zhi(){
// 获取输入的值
var n = document.getElementById("one").value;
document.write(n+" = ");
for(var i=2;i<=n;i++){
// 找出n所有的质因数
if(n%i==0){
n=n/i;
document.write(i+" * ");
i=1;
}
}
}
</script>
</body>
</html>
7. 最大公约数和最小公倍数
例题:
求任意两个正整数的最大公约数(GCD)和最小公倍数(LCM)
(1)最大公约数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>最大公约数</title>
</head>
<body>
<!-- 设置输入框 -->
<input type="text" id="one">
<input type="text" id="two">
<button type="button" onclick="x()">确定</button>
<script>
function x(){
// 获取输入的值
var n = document.getElementById("one").value;
var m = document.getElementById("two").value;
var result=1;
for(var i=2;i<=(n<m?n:m);i++){
if(n%i==0 && m%i==0){
n=n/i;
m=m/i;
result=result*i;
i=1;
}
}
document.write("最大公约数为:"+result);
document.write("<br>");
}
</script>
</body>
</html>
(2)最小公倍数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>最小公倍数</title>
</head>
<body>
<!-- 设置输入框 -->
<input type="text" id="one">
<input type="text" id="two">
<button type="button" onclick="x()">确定</button>
<script>
function x(){
// 获取输入的值
var n = document.getElementById("one").value;
var m = document.getElementById("two").value;
var result2=1;
for(var j=1;j<=m;j++){
for(var k=1;k<=n;k++){
if(j*n==k*m){
result2 = j*n;
document.write("最小公倍数为:"+result2);
return;
}
}
}
}
</script>
</body>
</html>
8. 完全数
例题:
求 1000 以内的完全数(若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数)。例如:6是一个完全数,因为 6 = 1 * 2 * 3 = 1 + 2 + 3
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>完全数</title>
</head>
<body>
<script>
for(var n=1;n<1000;n++){
var result=0;
for(var i=1;i<n;i++){
// 找出n除去它本身以外的一切因数
if(n%i==0){
result=result+i;
}
}
// 如果n的因数和等于n,则n为完全数
if(result==n){
document.write(n);
document.write("<br>");
}
}
</script>
</body>
</html>