我想剛好這禮拜都在寫簡單程式的關卡小小暖身,
也是時候該往下個階段邁進了。
這邊來快速 Review 一下這週寫過的簡單程式:
這次 30 天鐵人賽挑戰,
除了完賽,還有一個很重要的目標──
完成拖欠一年多的 JavaScript 最終作業!
(編按:有大大建議小的應該要說明一下 JavaScript 最終作業 是啥咪,
這是指 六角學院 所開設的「JavaScript 入門篇 - 學徒的試煉」課程的最終作業,
我拖了一年多還沒繳交出去orz)
要完成 JavaScript 最終作業,
除了 JavaScript 的語法外,
排版也是不可或缺的,
所以我想是時候該來複習排版了!
因此挑戰二週目就定調為網頁排版設計週,
要複習的概念有:
然後複習完再到「Flex 修煉時光屋」練功驗證以上的複習概念是不是已經都吸收了。
(編按:「Flex 修煉時光屋」一樣是六角學院課程「使用 HTML、CSS 開發一個網站」中洧杰老師所設立的其中一個 DLC XD)
不過如果今天這篇只有交代下週的規劃好像有點說不過去,
來改一下昨天文章說的XD
這邊就不像前幾天文章把詳細過程記錄下來,
但有將詳細說明寫在程式註解。
// let basicNum = 66;
let factorSum; // 因數總和
let factorArray = []; // 因數陣列
let compareNum; // (因數總和 - 數字本身)/2
let admirableOddNumArray = []; // 奇佩服數
let admirableEvenNumArray = []; // 偶佩服數
let countTimes_1 = 0; // 前半段計算次數
let countTimes_2 = 0; // 後半段計算次數
for ( let basicNum=2; basicNum<1000; basicNum++){
factorSum = 1;
factorArray = [1,];
let endNum = basicNum;
for ( let i=2; i<endNum; i++ ){
countTimes_1++;
if ( basicNum%i === 0 ){
factorArray.push(i);
factorSum += i;
if ( i !== basicNum/i ){
factorArray.push(basicNum/i);
factorSum += basicNum/i;
}
endNum = basicNum/i;
}
}
// 因為要找到是否有數字是因數總和(不包含自己)-某因數*2=數字本身
// 例如 12 因數總和為 16
// ( 16 - 12 ) / 2 = 2 為 12 的因數之一,表示 12 為佩服數
compareNum = (factorSum - basicNum)/2; // (因數總和 - 數字本身)/2
if ( factorArray.indexOf(compareNum) >=0 ){ // indexOf 找陣列裡的元素並回傳位置(沒有就回傳-1)
if ( basicNum%2 !== 0 ){
console.log(`${basicNum} 是奇佩服數!`);
admirableOddNumArray.push(basicNum);
} else{
console.log(`${basicNum} 是偶佩服數!`);
admirableEvenNumArray.push(basicNum);
}
}
}
console.log(`奇佩服數共有 ${admirableOddNumArray.length} 個`);
console.log(`偶佩服數共有 ${admirableEvenNumArray.length} 個`);
console.log(`前半段計算次數 ${countTimes_1} 次`);
console.log(`後半段計算次數 ${countTimes_2} 次`);
耶~我終於改成一個迴圈完成佩服數的判斷~ (不含外圈跑數字的迴圈)
迴圈找出因數存在陣列,並計算因數總和,
然後只要用 indexOf 找出是否有因數可以達成佩服數條件就好~
本日打完收工,大家第二週見:D