java基础算法题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/b509_ying/article/details/89042548

        无论什么时候,面试官都看重程序员的算法基本功,这也是证明自己能力的最直接的方法,所以面试之前一定要多多温习算法,最近因为面试我简单总结了几个小算法,编译运行通过的,如果有什么错误,欢迎指正^V^

1.求n的阶乘

方法一:使用递归算法

/**
	 * 递归求阶乘
	 * @param n
	 * @return
	 */
	public int fac1(int n){
		if(n<0){
			return -1;//不合法
		}else if(n==0){
			return 1;//0的阶乘是1
		}else{
			return n*fac1(n-1);
		}
	}

方法二:

/**
	 * 不适用递归求阶乘
	 * @param n
	 * @return
	 */
	public int fac2(int n){
		int res =1;
		if(n<0){
			return -1;
		}
		if(n==0){
			return 1;
		}
		for(int i=1;i<=n;i++){
			res = res*i;
		}
		return res;
	}

2.实现从1到100的求和

//1到100求和
	public int sum(){
		int sum = 0;
		for(int i=1;i<=100;i++){
			sum +=i;
		}
		return sum;
	}

3.输出9*9口诀

//输出9*9口诀
	public void multiply(){
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				System.out.print(j+"*"+i+"="+(i*j)+"   ");
				if(j==i){
					System.out.println();
				}
			}
		}
	}

结果如下:

  

4.约瑟夫环问题:使用有80个小朋友手拉手围成一圈,由第一个小朋友开始从1开始数,数到3的小朋友退出,再从后面的小朋友从1数起,数到3的再退出,以此游戏下去,问最后剩下哪个小朋友?

//约瑟夫环问题
	public void findChild(){
		//定义一个数组,长度80,代表80个小朋友
		int[] childs = new int[80];
		//给小朋友编号
		for (int i=0;i<childs.length;i++) {
			childs[i] = i+1;
		}
		//设置计数器,进行数数
		int count = 0;
		//记录退出小朋友人数
		int number = 0;
		//记录数组下标
		int i = 0;
		//当退出人数小于(总人数-1)时遍历小朋友数组,数到3的小朋友退出
		while(number<childs.length-1){
			for(i=0;i<=childs.length-1;i++){
				if(childs[i] != 0){//判断小朋友编号是否为0
					count++;
					if(count==3){//数到3的小朋友编号变为0,
						childs[i]=0;
						number++;//退出人数+1
						count=0;//计数器置0
					}
				}
			}
			i=0;//重新遍历数组
		}
		//遍历数组,找出编号不为0的小孩
		for (int j=0;j<childs.length;j++) {
			if(childs[j]!=0){
				System.out.println("最后剩下孩子编号为"+childs[j]);
			}
		}
	}

结果如下:

5.有1、2、3、4这4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

public class TestPro1 {
	public static void main(String[] args){
		int[] a = {1,2,3,4};
		int b = 0 ;
		for(int i = 0 ; i<4 ; i++){
			for(int j = 0 ; j<4 ; j++){
              for(int k = 0 ;k<4 ; k++){
            	  if(i == j || i == k || j == k){                    
                  }else{
                      System.out.print(a[i]*100+a[j]*10+a[k]);
                      b++;
                      System.out.println();
                  }                    
              }
          }
      }
      System.out.print(b);
	}
}

6.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

public class FlowerTest {
	public static void main(String[] args){
		int a=0;
		int b=0;
		int c=0;
		for(int i=100;i<=999;i++){
			a=i/100;
			b=i%100/10;
			c=i%10;
			if(i==a*a*a+b*b*b+c*c*c){
				System.out.println(i);
			}
		}
	}
}

7.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

public static void main(String[] args){
		int num=32;
		int k = 2;
		System.out.print(num + "=");
		while (num > k) {
           if (num % k == 0) {
               System.out.print(k + "*");
               num = num / k;
           } else {
               k++;
           }
       }
       System.out.println(k);
   }

猜你喜欢

转载自blog.csdn.net/b509_ying/article/details/89042548