1. 斐波那契算法
斐波那契数列,又被称为兔子繁殖问题的解法,黄金分割比例。
1 /*2 * 斐波那契数列算法,n表示第n个月份,假定n是大于0的*/3 public int fibonacci(int n){4 if(n == 1||n == 2){5 return 1;6 }else{7 return fibonacci(n-2)+fibonacci(n-1);8 }9 }
2. 判断一个数是否为质数
1 /* 2 * 判断一个数是否是质数,若返回值为-1则说明输入值既不是质数也不是偶数; 3 * 若返回值为1则说明输入值为质数; 4 * 若返回值为0则说明输入值为合数*/ 5 public int prime(int n){ 6 int flag = 1; 7 if(n == 1){ 8 return -1; 9 }else{10 for (int i = 2; i <=n ; i++) {11 if(n%i==0&&i!=n){12 flag = 0;13 break;14 }15 }16 }17 return flag;18 }
3. 输出100-1000之间的所有水仙花数
1 /* 2 * 水仙花数是指一个 n 位正整数 ( n≥3 ), 3 * 它的每个位上的数字的 n 次幂之和等于它本身。*/ 4 public void daffodil(){ 5 for (int i = 100; i <1000 ; i++) { 6 int a = i/100; 7 int b = i/10%10; 8 int c = i%10; 9 if(i==(a*a*a+b*b*b+c*c*c)){10 System.out.println(i);11 }12 }13 }
4. 输出一个数的所有质因数
1 public void pnum(int n){ 2 int temp = 2;//将最小的质数赋值给temp 3 System.out.print("数字"+n+"="); 4 if (n <= 2) { 5 System.out.println("该数为无效数字!"); 6 }else{ 7 while(temp<=n){ 8 if((n%temp)==0){ 9 System.out.print(temp+"*");10 n=n/temp;11 }else{12 temp++;13 }14 }15 }16 }
5. 数组题
有两个数组,以数组s1的顺序为准,输出数组s1和数组s2共有的元素。
1 public static String[] inArray(String[] array1, String[] array2) { 2 String[] newString = new String[10]; 3 int m = 0; 4 for (int i = 0;i
6. 求两个数的最大公约数
常见的求法有短除法,分解质因数法,辗转相除法和更相减损术。而在这几个里面中适合我们编写程序的有辗转相除法和更相减损术。
a. 辗转相除法,又叫欧几里德算法,是解决求最大公约数最常用的方法。
1 public static void gcd(int m,int n){ 2 int r = m%n; 3 if(r == 0){ 4 System.out.println("两数的的最大公约数是:"+n); 5 }else{ 6 m = n; 7 n = r; 8 gcd(m,n); 9 }10 }
b. 更相减损术,是九章算术中给我们提供的一种算法,其实现原理是:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。解释来说就是:如果两个数都是偶数,就折半分之( 用2来约分),两个数都不是偶数的话,以大数减小数,直至减数与差相等为止。
1 public static void gcd2(int m,int n){ 2 while(m!=n){ 3 if(m>n){ 4 m = m-n; 5 }else{ 6 n = n-m; 7 } 8 } 9 System.out.println("最大公约数是:"+m);10 }
7. 求两个数的最小公倍数
1 public static void lcm(int m,int n){ 2 int i = 2; 3 if(m
8. 判断一个字符串包含多少个数字,包含多少个字母,包含多少个空格,除此之外还剩多少字符。
1 public static void count(){ 2 int numCount = 0; 3 int letterCount = 0; 4 int spaceCount = 0; 5 int other = 0; 6 Scanner console = new Scanner(System.in); 7 String str = console.nextLine(); 8 for(int i = 0;i
说明:从控制台获取输入的字符串时,要注意使用nextLine()方法,不要使用next()方法,否则会出现当字符串中包含空格时,它获取到的字符串与输入的不一致。(原因:next()方法匹配的原则是以空格为一个标记)。