package com.ccl.algo; public class Classical { /** * @param args * @author changlun.cheng * @see 默默寒窗苦code */ public static void main(String[] args) { Classical c = new Classical(); c.rabbit(30); System.out.println(); c.prime(102, 200); System.out.println(); c.daffodil(10, 9999); System.out.println(); // c.resolve(90); System.out.println(); c.score(89); System.out.println(); c.total("sasd 2 BDFS 】》?ぼ1 sad !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ 你妹·"); c.salary(1100000.1); System.out.println(c.getDay(1900, 12, 2)); } /** * @param year * @param month * @param day * @return 這天是一年中的第幾天 */ public int getDay(int year, int month, int day) { int indexDay = 0; switch (month) { case 1: indexDay = 0; break; case 2: indexDay = 31; break; case 3: indexDay = 59; break; case 4: indexDay = 90; break; case 5: indexDay = 120; break; case 6: indexDay = 151; break; case 7: indexDay = 181; break; case 8: indexDay = 212; break; case 9: indexDay = 243; break; case 10: indexDay = 273; break; case 11: indexDay = 304; break; case 12: indexDay = 334; break; default: break; } int flag = 0; if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) flag = 1; if (flag == 1 && month > 2) indexDay++; indexDay += day; return indexDay; } /** * @definition powerful a>b?b:a * @param sal * <pre> * 企業發放的獎金根據利潤提成: * 利潤(I)低于或等于10萬元時,獎金可提10%; * 利潤高于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可提成7.5%; * 20萬到40萬之間時,高于20萬元的部分,可提成5%; * 40萬到60萬之間時,高于40萬元的部分,,可提成3%; * 60萬到100萬之間時,高于60萬元的部分,可提成1.5%, * 高于100萬元時,超過100萬元的部分按1%提成. * </pre> * */ public void salary(double sal) { java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00"); double PROFIT_0_10 = 0.1, PROFIT_10_20 = 0.075, PROFIT_20_40 = 0.05, PROFIT_40_60 = 0.03, PROFIT_60_100 = 0.015, PROFIT_100 = 0.01; int wan = 10000; double profit = sal > 100 * wan ? (sal - 100 * wan) * PROFIT_100 : (sal > 60 * wan ? (sal - 60 * wan) * PROFIT_60_100 : (sal > 40 * wan ? (sal - 40 * wan) * PROFIT_40_60 : (sal > 20 * wan ? (sal - 20 * wan) * PROFIT_20_40 : (sal > 10 * wan ? ((sal - 10 * wan) * PROFIT_10_20 + 10 * wan * PROFIT_0_10) : (sal * PROFIT_0_10))))); System.out .println("salary: " + (sal + profit) + "\t profit: " + profit); System.out.println("salary: " + df.format((sal + profit)) + "\t profit: " + df.format(profit)); } /** * 統計字母/數字/空格/標點符號/中文/其他 * * @param str */ public void total(String str) { int word = 0, number = 0, space = 0, sign = 0, chinese = 0, other = 0; String E1 = "^[A-Za-z]$";// 字母 String E2 = "[0-9]";// 數字 String E3 = "\\p{Space}";// ="\\s" String E4 = "\\p{Punct}";// 標點符號 String E5 = "[\u4e00-\u9fa5]";// 中文 char[] array = str.toCharArray(); for (char c : array) { str = c + ""; if (str.matches(E1)) { word++; } else if (str.matches(E2)) { number++; } else if (str.matches(E3)) { space++; } else if (str.matches(E4)) { sign++; } else if (str.matches(E5)) { chinese++; } else { other++; } } System.out.println("word:" + word + "\t number:" + number + "\t space:" + space + "\t sign:" + sign + "\t chinese:" + chinese + "\t other:" + other); } /** * boolean(a,b)?a:b * * @param score */ public void score(int score) { char c = score >= 90 ? 'A' : (score >= 80 ? 'B' : (score >= 70 ? 'C' : (score >= 60 ? 'D' : 'E'))); System.out.println("grade:" + c); } /** * @result if(f1||f2)先執行f1如果f1d返回的true就不會執行f2 */ /** * 分解數位素數因子 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。 * * @param N */ public void resolve(int N) { for (int i = 2; i < N; i++) { if (isPrime(i)) {// 判斷是素數,不用判斷也行 if (N % i == 0) { System.out.print(i + "*"); resolve(N / i); } } } System.out.print(N); System.exit(0);// 告訴JVM不要再運行了。 } /** * 打印出所有的 "水仙花數 ",所謂 "水仙花數 "是指一個三位數,其各位數字立方和等于該數本身。例如:153是一個 * "水仙花數 ",因為153=1的三次方+5的三次方+3的三次方 擴展到n位數的水仙花數,就是有多少位數就分各位數的n方加起來==本身 * * @param start * @param end */ public void daffodil(int start, int end) { for (; start <= end; start++) { if (isDaffodil(start)) System.out.print(start + "\t"); } } /** * 是不是水仙花數 * * @char[] cs cs[0]作運算時 會轉成ASCLL碼數 * @param param * @return */ private boolean isDaffodil(int param) { String s = param + ""; int len = s.length(); char[] cs = s.toCharArray(); int r = 0; for (int i = 0; i < len; i++) { r += sqrt(Integer.parseInt(cs[i] + ""), len); } if (r == param) return true; return false; } /** * len方數 * * @param i * @param len * @return */ private int sqrt(int i, int len) { int result = i; for (int j = 1; j < len; j++) result *= i; return result; } /** * 判斷start-end之間有多少個素數,并輸出所有素數。 */ public void prime(int start, int end) { for (; start <= end; start++) { if (isPrime(start)) System.out.print(start + "\t"); } } /** * 判斷是否是素數=質數 * * @param param * @return */ public boolean isPrime(int param) { for (int i = 2; i < param / 2; i++) if (param % i == 0) return false; return true; } /** * 有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第四個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少 * * 1 1 2 3 5 8 13 21 34 55 89 144... 遞歸返回,要從最多月開始往下算,如果我知道上兩個月有多少,這個月的我就知道了。 * == 上兩個月加起來 * * @param n */ public void rabbit(int n) { for (int i = 1; i < n; i++) { System.out.print(function(i) + "\t"); } } private int function(int i) { if (i == 1 || i == 2) return 1; else { return function(i - 1) + function(i - 2); } } }
作者:chengchanglun 發表于2012-4-12 17:08:39 原文鏈接
閱讀:109 評論:0 查看評論