java基础编程一
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<array1.length;i++) { 5 for(int j = 0;j<array2.length;j++){ 6 if(array2[j].contains(array1[i])){ 7 newString[m] = array1[i]; 8 m++; 9 break; 10 } 11 } 12 } 13 return newString; 14 }
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<n){ //判断m,n的大小是为了 4 // 减少while循环的次数,去掉判断也能出结果 5 m = m^n; 6 n = m^n; 7 m = m^n; 8 } 9 int temp = m; 10 while(temp%n!=0){ 11 temp = m*i; 12 i++; 13 } 14 System.out.println("两个数的最小公倍数为:"+temp); 15 }
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<str.length();i++){ 9 char t = str.charAt(i); 10 if(Character.isDigit(t)){ 11 numCount++; 12 }else if(Character.isLetter(t)){ 13 letterCount++; 14 }else if(Character.isSpaceChar(t)){ 15 spaceCount++; 16 }else{ 17 other++; 18 } 19 } 20 System.out.println("该字符串中包含数字"+numCount+ 21 "个,包含字母(包含大小写字母)"+ 22 letterCount+"个,包含空格"+ 23 spaceCount+"个,其他字符"+other+"个。"); 24 }
说明:从控制台获取输入的字符串时,要注意使用nextLine()方法,不要使用next()方法,否则会出现当字符串中包含空格时,它获取到的字符串与输入的不一致。(原因:next()方法匹配的原则是以空格为一个标记)。