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()方法匹配的原则是以空格为一个标记)。

posted @ 2017-05-04 19:59  守明  阅读(154)  评论(0编辑  收藏  举报