本周未安排實作輔導 預定 : 下周六
迴圈 LOOP 應用 判斷質數 (Prime number) 求兩個整數的最大公因數 (greatest common divisor, GCD) 判斷迴文 (palindrome)
搶答!!
Q1 : 印出結果? int s,x; s=0; for(x=1;x<5;x++) s=s*x; System.out.println("s="+s);
Q2 : 印出結果? s=1; for(x=1;x<5;x++){ s=s*x; x++; } System.out.println("s="+s);
Q3 : 印出結果? s=x=1; for(;x<100;){ s=s+x; if(x==51)break; ++x; } System.out.println("x="+x);
Q4 : 印出結果? s=x=1; do{ s=s+x; x++; }while(x>=10); System.out.println("x="+x+" s=" +s);
Q5 : 印出結果? s=x=10; while(x<=0){ s=x; x=x+2; } System.out.println("x="+x+" s=" +s);
Q6 : 印出結果? s=x=10; while(x<=10){ s=x; x=x+2; } System.out.println("x="+x+" s=" +s); }
Q1~Q6 初值
Q7 Debug : 輸入奇數 n, 求 S=1+3+5+...+n 1.import java.util.scanner; 2.public class loop_debug_1 { 3. public static void main(string[] args) { 4. Scanner input = new Scanner(System.in); 5. int n=7,i=0, s=0; 6. System.out.println(" 輸入奇數 n, 求 S=1+3+5+...+n\n"); 7. while (n>=1) { 8. System.out.print(" 輸入奇數 (-1:end):"); 9. n = input.nextint(); 10. for(i=1;i<=n;++i) 11. s=s+i; 12. System.out.println("1+3+5+...+"+n+"="+s); 13. }//while 14. 15. }//main 16.}//class 搶答 : 那些錯誤? 如何修? 寫出編號及修改結果
Q8 Debug : 輸入整數 n, 求 S= 1*2*3*...*n 1. import java.util.scanner; 2. public class all_loop_1 { 3. public static void main(string[] args) { 4. Scanner input = new Scanner(System.in); 5. int n=7,i=0; 6. int s=0; 7. System.out.println(" 輸入整數 n, 求 S=1*2*3*...*n\n"); 8. while (n>=1) { 9. System.out.print(" 輸入整數 (-1:end):"); 10. n = input.nextint(); 11. for(i=1;i<=n;++i) 12. s=s*i; 13. System.out.println("1*2*3*...*"+n+"="+s); 14. }//while 15. }//main 16. }//class 搶答 : 那些錯誤? 如何修? 寫出編號及修改結果
Debug : 輸入奇數 n, 求 S=1+3+5+...+n 1.import java.util.scanner; 2.public class loop_debug_1 { 3. public static void main(string[] args) { 4. Scanner input = new Scanner(System.in); 5. int n=7,i=0, s=0; 6. System.out.println(" 輸入奇數 n, 求 S=1+3+5+...+n\n"); 7. while (n>=1) { 8. System.out.print(" 輸入奇數 (-1:end):"); 9. n = input.nextint(); 10. if (n%2==0) { 11. System.out.println(" 輸入錯誤, 須為奇數!"); 12. continue;} 13. for(i=1;i<=n;++i) 14. s=s+i; 15. System.out.println("1+3+5+...+"+n+"="+s); 16. }//while 17. 18. }//main 19.}//class 處理輸入錯誤
類型 1( 最常見 ): ; for( ; ; ) ; ; 不同 for loop 類型四類型都 equivalence 類型 3: ; for( ; ;, ) ; ; True False 類型 2: ; ; for(; ; ) ; ; 類型 4: ; ; for(; ; ) { ; ;} ;
迴圈 LOOP 應用 判斷質數 求兩個整數的最大公因數 (greatest common divisor, GCD) 判斷迴文 palindrome
判斷質數 質數 (Prime number) 又稱素數, 指在大於 1 的自然數中, 除了 1 和該數自身外, 無法被其他自然數整除的數 ( 也可定義為只有 1 與該數本身兩個正因數的數 ) 2, 3, 5, 7, 11, 13,.. 是質數 解法 : 求 n 是否為質數? 利用除法 N/2, N/3, N/4,., N/(N-1) N%2 0,N%3 0..N%(N-1) 0 ( 如何判斷整除 ) N/2, N/3, N/4,., N/(N/2) 試除法 較簡單, 但需時較長 : 設被測試的自然數為 n, 使用此方法者需逐一測試 2 與 SQRT(n) ( n) 之間的整數, 確保它們無一能整除 n Reference: https://zh.wikipedia.org/wiki/%e7%b4%a0%e6%95%b0
判斷質數 1 int n=3, i; String dif; boolean prime; System.out.print(" 輸入 >=2 整數 :"); n = input.nextint(); if (n<=0) System.exit(-1); i=2; prime=true; while (i<=n-1) { if (n%i==0) { prime=false; break;} ++i; } if (prime) dif=" 是質數! ; else dif=" 不是質數!"; System.out.println(n+dif); }//while
判斷質數 2: 減少除法次數 利用二層 while, 提供重複數入數值及判斷 int n=3, i; String dif; boolean prime; while (n>2) { System.out.print(" 輸入 >=2 整數 :"); n = input.nextint(); if (n<=0) break; i=2; prime=true; while (i*i<=n) { if (n%i==0) {prime=false; break;} ++i; } if (prime) dif=" 是質數! ; else dif=" 不是質數!"; System.out.println(n+dif); }//while
Demo 判斷質數 prime_0.java prime_1.java
求兩個整數的最大公因數 (greatest common divisor, GCD) 兩個整數的最大公因數 (greatest common divisor) 是能夠同時整除它們的最大的正整數 求兩個整數 GCD 的方法 : 從 2 開始找, 直到能整除兩個整數的最大正整數 何時結束 ( 不會超過兩個整數的最小整數 ) 200, 40 的 GCD 輾轉相除法 ( 下一回 ) 輾轉相減法 ( 下一回 ) 最小公倍數 (LCM): n1*n2/gcd
求兩個整數 GCD 的方法 1 兩個整數的最大公因數 (greatest common divisor) 是能夠同時整除它們的最大的正整數
用三種 loop 完成 : while gcd=1; i=2; while (i<=n1 && i<=n2) { if (n1%i==0 && n2%i==0) gcd=i; i++;} //while System.out.println("1-while: GCD("+n1+","+n2+")="+gcd); System.out.println("1-while: LCM("+n1+","+n2+")="+n1*n2/gcd);
用三種 loop 完成 : do while gcd=1; i=2; do { if (n1%i==0 && n2%i==0) gcd=i; i++; } while (i<=n1 && i<=n2); System.out.println("2-do while: GCD("+n1+","+n2+")="+gcd);
用三種 loop 完成 : for for(gcd=1, i=2;(i<=n1 && i<=n2);i++) if (n1%i==0 && n2%i==0) gcd=i; System.out.println("3-for: GCD("+n1+","+n2+")="+gcd+"\n");
用三種 while loop 顯示過程 gcd=1; i=2; while (i<=n1 && i<=n2) { if (n1%i==0 && n2%i==0) { System.out.println(n1+" and "+n2+" 能被 "+i+" 整除,so 目前 gcd 改為 "+i); gcd=i;} i++;} //while System.out.println("1-while: GCD("+n1+","+n2+")="+gcd); System.out.println("1-while: LCM("+n1+","+n2+")="+n1*n2/gcd);
2017/1/2 line palindrome 迴文
palindrome 迴文 輸入字串, 判斷是否為迴文? 迴文 2017102 ABCBA ABBA 不是迴文 ABCBB 輸入字串 Scanner input = new Scanner(System.in); String str1 = input.nextline(); str1.length() : 字串長度 : 取得字串第 i 個字元 (character) i: 0~ -1 str1 A B C B A str1.length()==5 i=0 i=1 i=2 i=3 i=4 str1.charat(0) str1.charat(4)
取得字串第 i 個字元 (character)
輸入字串, 判斷是否為迴文? left=0;right=str1.length()-1; boolean palindrome=true; while (left<right) { if (str1.charat(left)!=str1.charat(right)) {palindrome=false; break;} left++; right--; }//while if (palindrome) dif=" 是迴文! ; else dif=" 不是迴文!"; System.out.println(+dif); left right A B C B A str1
第 10 周習題 : 10-1: 求 2~n 之所有質數 輸入 n, 列出 2~n 之所有質數 輸入錯誤 ( 如 <=1), 結束程式 輸入 n 後, 分別以 while, do..while, for 等三種迴圈求解 放置於同一.java 使用者可重複輸入, 直到輸入 <=1 或回答 N, 才結束程式題, 答錯不出下一題, 直到答對為止 ; (2) 出 N 題, 由 user 決定題數, 每題 10 分, 答錯之題目須於結束時顯示 ; 繳交 設計歷程 檔及.java
Review switch case
改為 5 等第
改變運算式 (score-50)/10
主題 : 字元金字塔 - 斜金字塔 利用迴圈印出 *, 逐行增加印出個數, 直到印出 7 層斜金字塔 本題利用到巢狀迴圈的概念 巢狀迴圈為迴圈範圍內又有迴圈, 從外層來看, 內層迴圈只屬與外層迴圈內的動作 因此外層迴作用, 內層迴圈開始運作到執行結束後, 又回到外層迴圈 執行結果