Java常见算法题解析面试题(中)

11.判断101-200之间有多少个素数,并输出所有素数。【重点】
程序分析:判断素数的方法,用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class lianxi {
    public static void main(String[] args) {
        int count = 0; 
        for(int i=101; i<200; i+=2) {
            boolean b = false; 
            for(int j=2; j<=Math.sqrt(i); j++) {
                if(i % j == 0) {
                    b = false; break;
                } else { 
                    b = true; 
                } 
            } 
            if(b == true) {
                count ++;
                System.out.println(i );
            } 
        } 
        System.out.println( "素数个数是: " + count);
    }
}
12.水仙花数。【了解】
问题描述:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
public class lianxi { 
    public static void main(String[] args) { 
        int b1, b2, b3;
        for(int m=101; m<1000; m++) { 
            b3 = m / 100;
            b2 = m % 100 / 10;
            b1 = m % 10; 
            if((b3*b3*b3 + b2*b2*b2 + b1*b1*b1) == m) { 
                System.out.println(m+"是一个水仙花数"); 
            } 
        } 
    }
}
13.正整数分解质因数。【了解】
问题描述:将一个正整数分解质因数,例如:输入90,打印出 90=2*3*3*5。 
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 
如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可;
如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数,重复执行第一步;
如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print( "请键入一个正整数: "); 
int n = s.nextInt();
  int k=2;
  System.out.print(n + "=" ); 
  while(k <= n) { 
if(k == n) { 
System.out.println(n); 
break;
} else if( n % k == 0) {
System.out.print(k + "*");
      n = n / k;
} else {
k++;
    } 
}
14.最大公约数和最小公倍数。【了解】
程序分析:在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的 较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。
import java.util.*; 
public class lianxi {
    public static void main(String[] args) { 
        int a ,b,m;
        Scanner s = new Scanner(System.in); 
        System.out.print( "键入一个整数:"); 
        a = s.nextInt(); 
        System.out.print( "再键入一个整数: ");
        b = s.nextInt(); 
        deff cd = new deff();
        m = cd.deff(a,b); 
        int n = a * b / m; 
        System.out.println("最大公约数: "+m); 
        System.out.println("最小公倍数: "+n); 
    }
}
class deff{ 
    public int deff(int x, int y){
        int t; 
        if(x < y) {
            t = x;
            x = y;
            y = t; 
        }
        while(y != 0) { 
            if(x == y)  return x;
            else { 
                int k = x % y;
                x = y;
                y = k;
            }
        }
        return x; 
    }
}
15.完数。【了解】
问题描述:一个数如果恰好等于它的因子之和,这个数就称为"完数",编程找出1000以内的所有完数,例如:6=1+2+3。
public class lianxi { 
    public static void main(String[] args) { 
        System.out.println("1到1000的完数有:"); 
        for(int i=1; i<1000; i++) { 
            int t = 0; 
            for(int j=1; j<= i/2; j++) { 
                if(i % j == 0) {
                    t = t + j;
                }
            }
            if(t == i) {
                System.out.print(i + " ");
            }
        } 
    }
}
16.完全平方数。【了解】
问题描述:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
public class lianxi { 
    public static void main(String[] args) { 
        for(int x =1; x<100000; x++) { 
            if(Math.sqrt(x+100) % 1 == 0) { 
                if(Math.sqrt(x+268) % 1 == 0) { 
                    System.out.println(x + "加100 是一个完全平方数,再加168 又是一个完全平方数");
                }
            }
        } 
    }
}

17.猴子吃桃。【了解】
问题描述:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
public class lianxi {
    public static void main(String[] args) { 
        int x = 1;
        for(int i=2; i<=10; i++) 
x = (x+1)*2; 
        System.out.println("猴子第一天摘了" + x + " 个桃子");
    }
}
18.乒乓球比赛。【了解】
问题描述:两个乒乓球队进行比赛,各出三人。甲队为a、b、c三人,乙队为x、y、z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x、z比,请编程序找出三队赛手的名单。
public class lianxi { 
    static char[] m = { 'a', 'b', 'c' };
    static char[] n = { 'x', 'y', 'z' }; 
    public static void main(String[] args) { 
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < n.length; j++){
                if (m[i] == 'a' && n[j] == 'x'){ 
                    continue;
                } else if (m[i] == 'a' && n[j] == 'y') { 
                    continue; 
                } else if ((m[i] == 'c' && n[j] == 'x') || (m[i] == 'c' && n[j] == 'z')) {
                    continue; 
                } else if ((m[i] == 'b' && n[j] == 'z') || (m[i] == 'b' && n[j] == 'y')) {
                    continue; 
                } else 
                    System.out.println(m[i] + " vs " + n[j]); 
            }
        } 
    }
}
19.求1+2!+3!+...+20!的和。【重点】 
public class lianxi { 
    public static void main(String[] args) { 
        long sum = 0; 
        long fac = 1;
        for(int i=1; i<=20; i++) { 
            fac = fac * i; 
            sum += fac;
        }
        ystem.out.println(sum);
    }
}
20.计算年龄。【了解】
问题描述:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
public class lianxi { 
    public static void main(String[] args) { 
        int age = 10;
        for(int i=2; i<=5; i++) { age =age+2; }
        System.out.println(age); 
    }
}

你可能感兴趣的:(Java,java,算法,开发语言)