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>