1. 在页面上输出100到1000之间既是3的倍数又是5的倍数的数字。
2. 鸡兔同笼:鸡和兔子一共35只,笼子里一共有94只脚,用程序计算出鸡和兔子分别多少只
3. 计算两个数的最大公约数和最小公倍数。
4. 求1!+2!+3!+...+10!的和。
5. 对一个整数分解质因数。例如: 90 = 2 * 3 * 3 * 5
6. 在页面中显示出所有的"水仙花数",所谓"水仙花数"是指一个三位数, 其各位数字立方和等于该数本身。
7. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。 例如6=1+2+3.编程 找出1000以内的所有完数。
1.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>既是3的倍数也是5的倍数</title>
<style>
p{
font:bold 16px "微软雅黑";
color:red;
}
span{
display: inline-block;
width: 50px;
}
</style>
</head>
<body>
<script>
// 题目:在页面上输出100到1000之间既是3的倍数又是5的倍数的数字。
var min=100;
var max=1000;
//count变量作为累加器
var count=0;
document.write("<p>"+min+"到"+max+"之间的数既是3的倍数也是5的倍数有:"+"</p>");
for(i=min;i<=max;i++){
//判断既是3的倍数又是5的倍数的i
if(i%3==0 && i%5==0){
document.write("<span>"+i+"</span>");
count++;
if(count%5==0){
document.write("<br>");
count=0;
}
}
}
</script>
</body>
</html>
2.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鸡兔同笼</title>
<style>
p{
font:bold 16px "微软雅黑";
color:red;
}
</style>
</head>
<body>
<!--题目:鸡兔同笼:鸡和兔子一共35只,笼子里一共有94只脚,用程序计算出鸡和兔子分别多少只-->
<script>
//兔子和鸡数量一共有amount
var amount=35;
//兔子和鸡脚支有foot
var foot=94;
document.write("<p>"+"鸡兔同笼:一共35只,94支脚"+"</p>");
//i设为是兔子的数量
for(var i=0;i<=amount;i++){
if(i*4+(amount-i)*2==foot){
document.write("满足以上条件有以下方案:"+"兔子数量:"+i+" 鸡的数量:"+(amount-i));
}
}
</script>
</body>
</html>
3.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>求两数的最大公约数和最小公倍数</title>
</head>
<body>
<!--题目:计算两个数的最大公约数和最小公倍数-->
<script>
var num1=+prompt("输入第一个数:");
var num2=+prompt("输入第二个数:");
//判断两个数的大小
//变量:divident放大数,divisor放小数,remainder放余数;
if(num1>num2){
divident=num1;
divisor=num2;
}else{
divident=num2;
divisor=num1;
}
//进行计算最大公约数
//基本思想就是辗转相除法(大数除以小数,小数除以上一步的余数,知道余数为0)
while(divident%divisor != 0){
remainder=divident%divisor;
divident=divisor;
divisor=remainder;
}
//变量:gcd最大公约数;lcm最大公倍数;
//求出了最大公约数,那么最大公约数基本思想就是:两数的成绩除以最大公约数。
var gcd=divisor;
var lcm=num1*num2/gcd;
//输出页面
document.write("您输入的两数为:"+num1 +" "+num2+"<br>");
document.write("两数最大公约数为: "+gcd+"<br>");
document.write("两数最小公倍数为: "+lcm+"<br>");
</script>
</body>
</html>
3.另解:思想算法简单一点,但算法时间复杂度不够优化
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>简单算法的最大公约数和最小公倍数</title>
</head>
<body>
<script>
var m=5;
var n=12;
var min=m<n ? m:n;
for(var i=min;i>0;i--){
if(m%i==0 && n%i==0){
console.log(m+"与"+n+"的最大公约数:"+i);
break;
}
}
var max=m>n? m:n;
for(var i=max;i>1;i++ ){
if(i%m==0 && i%n==0){
console.log(m+"与"+n+"的最小公倍数:"+i);
break;
}
}
</script>
</body>
</html>
4.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>阶乘相加</title>
</head>
<body>
<script>
//题目:求1!+2!+3!+...+10!的和
var sum=0;
for(var i=1 ;i<=10;i++){
//重中之重是mul变量的position
var mul=1;
for(var j=1;j<=i;j++){
mul*=j;
}
sum+=mul;
}
document.write(sum);
</script>
</body>
</html>
5.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>对一个分解因式整数</title>
<style>
span,p{
font:bold 16px "fantasy";
color:red;
}
</style>
</head>
<body>
<!--* 题目:对一个整数分解质因数。例如: 90 = 2 * 3 * 3 * 5-->
<!--* 概念分析:分解质因数只针对合数。每个合数都可以写成几个质数相乘的形式。
程式分析:如果是质数,分解质因数就是其本身。
这里我对2单独考虑,2既不是属于合数也不是属于质数。所以我对用户输入值要求大于2的数。(用if··else语句实现)
求一个数分解质因数,要从最小的质数除起(那么就不用prime的函数调用方法)
设置一个for循环,把他所有质数可能值遍历一遍。这种算法较为高效。
一直除到结果为质数为止。
-->
<script>
var input=+prompt("请输入您需要分解因数的数字:");
document.write("<span>您输入的数字:</span>"+input+"<p> 计算机分解因式结果为:</p>");
//textNum变量至关重要,如果没有他,比如5 只会输出5=5;不太好看。所以,设置一个变量testNum,
//只要看testNum就知道他是否本身就是质数啦
var testNum=input;
var n=input;
if(n<2)
{
document.write("Warning!请输入大于2的数!");
}else {
document.write(n + "=");
for (var i = 2; i <= Math.sqrt(n); i++) //这里时间复杂度为O(根号n),大大降低数量级。
{
while (n % i == 0) {
n = n / i;
document.write(i + " ");
if (n != 1) {
document.write("*");
}
}
}
//prime质数出口
if(n==testNum){
document.write("1* "+n);
}
if (n!=1 && n!=testNum) {
document.write(n);
}
}
</script>
</body>
</html>
5.另解:容易理解点的算法思想,但不优化代码
<script>
//5. 对一个整数分解质因数。例如: 900 = 2 * 2 *
//num只是测试数据
var num = 900;
var temp = num;
var msg = num + " = ";
for (var i = 2; i <= temp; i++){
if (temp % i == 0){
if (i == temp){ // 最后一次的时候不要再添加 * 号
msg += i;
}else{
msg += i + " * ";
}
temp = temp / i;
i--;
}
}
console.log(msg);
</script>
6.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水仙花</title>
</head>
<body>
<style>
h3{
color:red;
}
</style>
<script>
//在页面中显示出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
//此题主要是考察两个知识点
//求三位数的各个位数字
//求立方项,用函数写法时间复杂度会降低一个数量级O(n);
document.write("<h3>三位数的水仙花数有:</h3>");
function cube(x){
return x*x*x;
}
for(var num=100;num<=999;num++){
var unit=num%10;
var decade=parseInt((num%100)/10);
var hundred=parseInt (num/100);
var outUnit=cube(unit);
var outDecade=cube(decade);
var outHundred=cube(hundred);
if(outUnit+outDecade+outHundred == num){
document.write(num+"<br>");
}
}
</script>
</body>
</html>
7.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>1000以内的所有完数</title>
<style>
h3{
color: red;
}
</style>
</head>
<body>
<!--题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。
例如6=1+2+3.编程 找出1000以内的所有完数。-->
<script>
document.write("<h3>1000以内的所有完数:</h3>");
//count累加器,作为换行计数器
var count;
//外层for循环是遍历1--1000数字的作用,变量i就是各个数
for(var i=1;i<1000;i++){
//Position of variate is important!!!
var sum=0;
//内层for循环是找出其数的所有因子,变量j就是各个因子
for(var j=1;j<i;j++){
if(i%j==0){
sum+=j;
}
}
//判断因子和是否等于其本身number值,若是则是完数并输出。
if(sum==i){
document.write(i+" ");
//以下代码是用来5个换行,但没用到,因为1000内数只有三个是完数。
count++;
if(count%5 == 0){
document.write("<br>");
count=0;
}
}
}
</script>
</body>
</html>