package com.ahua.arithmetic; /**题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 * @author Administrator * */ public class ConditionOperator { public static void main(String[] args) { for (int i = 50; i < 100; i++) { getLevel(i); } } public static void getLevel(int score){ System.out.println(score +":"+((score>=90)?"A":((score>=60)?"B":"C"))); } }
package com.ahua.arithmetic; import java.util.ArrayList; /**题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 * @author Administrator * */ public class FenJie { public static void main(String[] args) { for (int i = 2; i < 150; i++) { ArrayList<Integer> result = fenjie(i); System.out.println(i+":"+result.toString()); } } /** 对某个数进行质因数分解 * @param number * @return */ public static ArrayList<Integer> fenjie(int number){ ArrayList<Integer> result = new ArrayList<Integer>(); for(int j = 2; j < 150; j++){ if(number%j==0 && isPrimeNumber(j) && number>=j){ result.add(j); ArrayList<Integer> result2 =fenjie(number/j); for (int i = 0; i < result2.size(); i++) { result.add(result2.get(i)); } break; } } return result; } /** 判断一个数是否是素数(质数) * @param num * @return */ public static boolean isPrimeNumber(int num){ int half = num/2; for (int i = 2; i < half; i++) { if(num%i==0){ return false; } } return true; } }
package com.ahua.arithmetic; /**题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 * @author Administrator * */ public class FindDaffodilNumber { public static void main(String[] args) { for (int i = 100; i < 999; i++) { if(isDaffodilNumber(i)){ System.out.println(i); } } } public static boolean isDaffodilNumber(int number){ int tenNum =number/10%10; int hundredNum = number/100; int singleNum = number%10; int result = (int) (java.lang.Math.pow(tenNum, 3)+ java.lang.Math.pow(hundredNum, 3)+ java.lang.Math.pow(singleNum, 3)); if(result==number){ return true; } return false; } }
package com.ahua.arithmetic; /**题目:判断101-200之间有多少个素数,并输出所有素数。 *1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, *则表明此数不是素数,反之是素数。 * @author Administrator * */ public class FindPrimeNumber { public static void main(String[] args) { for (int i = 101; i < 200; i++) { if(isPrimeNumber(i)){ System.out.println(i); } } } public static boolean isPrimeNumber(int num){ int half = num/2; for (int i = 2; i < half; i++) { if(num%i==0){ return false; } } return true; } }
package com.ahua.arithmetic; import java.util.Scanner; /**题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 * @author Administrator * */ public class GcdTes { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int num1 = sc.nextInt(); int num2 = sc.nextInt(); int gongyueshu = getGongyueshu(num1,num2); int gongbeishu = getGongbeishu(num1,num2); System.out.println(gongyueshu+":"+gongbeishu); } /** 两个数的最小公倍数= 两数乘积/最大公约数 * @param num1 * @param num2 * @return */ private static int getGongbeishu(int num1, int num2) { return num1*num2/getGongyueshu(num1,num2); } /** 两数的最大公约数:大数/小数,将余数代替大数,迭代求,直到余数为0时,倍除数就是最大公约数 * @param num1 * @param num2 * @return */ private static int getGongyueshu(int num1, int num2) { int a=0,b=0; if(num1>=num2){ a = num1; b = num2; }else{ b = num1; a = num2; } if(a%b==0){ return b; }else{ int c = a%b; return getGongyueshu(c,b); } } }
package com.ahua.arithmetic; import java.util.Scanner; /**题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为'\n'. * @author Administrator * */ public class StChar { public static void main(String[] args) { int abcCount=0;//英文字母个数 int spaceCount=0;//空格键个数 int numCount=0;//数字个数 int otherCount=0;//其他字符个数 Scanner scan=new Scanner(System.in); String str=scan.nextLine(); char[] ch = str.toCharArray(); for(int i=0;i<ch.length;i++){ if(Character.isLetter(ch[i])){ //判断是否字母 abcCount++; }else if(Character.isDigit(ch[i])){ //判断是否数字 numCount++; }else if(Character.isSpaceChar(ch[i])){ //判断是否空格键 spaceCount++; }else{ //以上都不是则认为是其他字符 otherCount++; } } System.out.println("字母个数:"+abcCount); System.out.println("数字个数:"+numCount); System.out.println("空格个数:"+spaceCount); System.out.println("其他字符个数:"+otherCount); } }
package com.ahua.arithmetic; import java.util.ArrayList; import java.util.Scanner; import java.util.concurrent.ArrayBlockingQueue; /**题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 * @author Administrator * */ public class TestAdd { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int num1 = sc.nextInt(); while (num1<=0||num1>9) { System.out.println("请输入一个个位数"); num1 = sc.nextInt(); } int num2 = sc.nextInt(); while (num2<=0||num2>9) { System.out.println("请输入一个个位数"); num2 = sc.nextInt(); } ArrayList<Long> tempArray = new ArrayList<Long>(); for (int i = 0; i < num2; i++) { Long temp = getNum(num1,i); tempArray.add(temp); } System.out.println(tempArray); long sum = 0L; for (int i = 0; i < tempArray.size(); i++) { sum += tempArray.get(i); } System.out.println(sum); } private static long getNum(int num1, int count) { long result = num1; for (int j = 0; j < count; j++) { result = result*10 + num1; } return result; } }
package com.ahua.arithmetic; public class TestRabbit { /**题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? * 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... * @param args */ public static void main(String[] args) { int a = 1; int b = 1; for (int i = 0; i < 12; i++) { if(i==0 || i==1){ System.out.println(i+":"+a); }else{ int temp = a+b; a = b; b = temp; System.out.println(i+":"+temp); } } } }