zoukankan      html  css  js  c++  java
  • Java 面试编程题【精选 50 题】

     ◆◆◆◆◆Java面试编程题【精选50题】◆◆◆◆◆

    【程序1】
    题目:古典问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月
    又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    //这是一个菲波拉契数列问题
    解题思路:1 1 2 3 5 8 13…… 将第一月、第二月单独拿出来输出,然后以后每个数字都是前面两个的和。就直接输出就是了。用到 if - else 判断输入的月数。
    https://www.cnblogs.com/ForeverLover/p/4863563.html


    【程序2】
    题目:判断101-200 之间有多少个素数,并输出所有素数。
    程序分析:判断素数的方法:用一个数分别去除2 到sqrt(这个数),如果能被整除, 则表明
    此数不是素数,反之是素数。
    解题思路:用到两个 for 循环,一个用来控制 101-200 的每一个数字,一个用来给每一个数字做除法,在里面做除法,如果能整除则设置这个标记这个数就跳出,过后再判断是不是进了这个判断中 count++,输出这个数。这里可以设置一个标记,默认是素数。
    https://www.cnblogs.com/justdoitba/p/7142350.html


    【程序3】
    题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和
    等于该数本身。例如:153 是一个"水仙花数",因为153=1 的三次方+5 的三次方+3 的
    三次方。
    解决思路:用一个 for 循环在三位数中,用 / % 取出这个数的个位,十位,百位,再 if 一下,输出这个数字即可。
    /**17.	求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a3 + b3 + c3 = abc,则abc是水仙花数。
    */
    public class Demo17{
    	public static void main(String[] args){
    		for(int i = 100; i < 1000; i++){
    			int c = i % 10;
    			int b = i / 10 % 10;
    			int a = i / 100 % 10;
    			if(a * a * a + b * b * b + c * c *c == i)
    				System.out.print(i + "\t");
    		}
    	}
    }
    

      


    【程序4】
    题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
    程序分析:对n 进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n <> k,但n 能被k 整除,则应打印出k 的值,并用n 除以k 的商,作为新的正整数
    你n,重复执行第一步。
    (3)如果n 不能被k 整除,则用k+1 作为k 的值,重复执行第一步。
    解决思路:用一个 for 将输入的数字从 2 开始循环下去(变化也就是2—5左右,因为最大数会一直被除到最小),其实主要是后面的while 在变化,一个 while 将这个变化后的数字与for 的数字比较是否相等不等,就一个 if 判断等于 0 的情况输出质数并改变这个数字的值(除以质数),不等于 0 就break 掉这个while。for 完后,就将最后的这个数字输出来。
    https://blog.csdn.net/huolei_blog/article/details/23466589

    【程序5】
    题目:利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用A 表示,60-89 分之
    间的用B 表示,60 分以下的用C 表示。
    解题思路:用三元表达式
    /**
    *【程序5】
    *题目:利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用A 表示,60-89 分之
    *间的用B 表示,60 分以下的用C 表示。
    */
    import java.util.Scanner;
    public class Demo5{
    	public static void main(String[] args){
    		Scanner s = new Scanner(System.in);
    		System.out.println("请输入成绩:");
    		double score = s.nextDouble();
    		char c = score >= 90 ? 'A': (score >=60 && score <=89 ? 'B' : (score < 60 ? 'C':'S'));
    		System.out.println("您的等级是:"+c);
    	}
    }
    

      

    【程序6】
    题目:输入两个正整数m 和n,求其最大公约数和最小公倍数。
    /**在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的
    大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大
    的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。* /
    /**【程序6】
    *题目:输入两个正整数m 和n,求其最大公约数和最小公倍数。
    *在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的
    *大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大
    *的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。
    */
    import java.util.Scanner;
    public class Demo6{
    	public static void main(String[] args){
    		Scanner s = new Scanner(System.in);
    		System.out.println("请输入两个正整数:");
    		int m1 = s.nextInt();
    		int n1 = s.nextInt();
    		int m = m1 > n1 ? m1 : n1;
    		int n = m1 < n1 ? m1 : n1;
    		int ji = m * n;
    		while(n != 0){
    			int temp = m % n;
    			m = n;
    			n = temp;
    		}
    		System.out.println("最大公约数为:"+m);
    		System.out.println("最小公倍数为:"+ji/m);
    	}
    }
     
    【程序7】
    题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
     
    /**【程序7】
    *题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。英文字母(65-90,97-122),空格(10),数字(48 - 57)
    */
    import java.util.Scanner;
    public class Demo7{
    	public static void main(String[] args){
    		Scanner s1 = new Scanner(System.in);
    		System.out.println("请输入字符串:");
    		String s = s1.nextLine();
    		char[] ch=s.toCharArray();
    		int zg=0,kg=0,sg=0,qg=0;
    		for(int i = 0 ; i < ch.length; i++){
    			if(ch[i] >=65 && ch[i] <= 90 || ch[i] >= 97 && ch[i] <= 122){
    				zg++;
    			}else if(ch[i] == ' '){
    				kg++;
    			}else if(ch[i] >= 48 && ch[i] <= 57){
    				sg++;
    			}else{
    				qg++;
    			}
    		}
    		System.out.println(s+" 中的英文字母有"+zg+"个,"+"空格的个数有"+kg+"个,"+"数字的个数有"+sg+"个,"+"其它字符有"+qg+"个。");
    		
    	}
    }
    

      

    【程序8】
    题目:求s=a+aa+aaa+aaaa+aa...a 的值,其中a 是一个数字。例如2+22+222+2222+22222(此
    时共有5 个数相加),几个数相加有键盘控制。

    解决思路:

    【程序9】
    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编
    程找出1000 以内的所有完数。

    /**20.	如果一个数等于其所有因子之和,我们就称这个数为"完数",
    例如6 的因子为1,2,3,6=1+2+3,6就是一个完数.请编程打印出1000  以内所有的完数
    */
    public class Demo20{
    	public static void main(String[] args){
    		for(int i = 0; i < 1000; i++){
    			int sum = 0;//这里的定义容易写到第一层循环的外面去导致出错
    			for(int j = 1; j <= i/2; j++){
    				if(i % j == 0){
    					sum += j;
    				}
    			}
    			if(sum == i){
    				System.out.print(i + "\t");
    			}	
    		}
    	}
    }
    

      


    【程序10】
    题目:一球从100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第
    10 次落地时,共经过多少米?第10次反弹多高?

    【程序11】
    题目:有1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    解题思路:用三个循环,最大为 4 ,然后将相同的 continue,不同的 count++ 一次就行了。

    /**
    *【程序11】
    *题目:有1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    */
    public class Demo11{
    	public static void main(String[] args){
    		int count = 0,i,j,k;
    		System.out.print("这些数字为:");
    		for(i = 1 ; i <= 4 ; i++)
    				for(j = 1 ; i <= 4 ; j++)
    						for(k = 1 ; k <= 4 ; k++)
    							if((i != j) && (i != k) && (j != k)){
    								count++;
    								System.out.print((i * 100 + j * 10 + k)",");
    							}
    		System.out.println("共有的数字个数为:"+count);
    		}
    }
    

      


    【程序12】
    题目:企业发放的奖金根据利润提成。利润(I)低于或等于10 万元时,奖金可提10%;利润
    高于10 万元,低于20 万元时,低于10 万元的部分按10%提成,高于10 万元的部分,可
    可提成7.5%;20 万到40 万之间时,高于20 万元的部分,可提成5%;40 万到60 万之间时
    高于40 万元的部分,可提成3%;60 万到100 万之间时,高于60 万元的部分,可提成1.5%,
    高于100 万元时,超过100 万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总
    数?

     解题思路:使用 if-else if 来作为分支,每一个算出来就行了。

    /**
    *【程序12】
    *题目:企业发放的奖金根据利润提成。利润(I)低于或等于10 万元时,奖金可提10%;利润
    *高于10 万元,低于20 万元时,低于10 万元的部分按10%提成,高于10 万元的部分,可
    *可提成7.5%;20 万到40 万之间时,高于20 万元的部分,可提成5%;40 万到60 万之间时
    *高于40 万元的部分,可提成3%;60 万到100 万之间时,高于60 万元的部分,可提成1.5%,
    *高于100 万元时,超过100 万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总
    *数? 
    */
    import java.util.Scanner;
    public class Demo12{
    	public static void main(String[] args){
    		Scanner s = new Scanner(System.in);
    		System.out.println("请输入薪资(单位:万元):");
    		double salary = s.nextDouble();
    		double jj = 0;
    		if(salary <= 10){
    			jj = salary * 0.1;
    		}else if(salary > 10 && salary < 20){
    			jj = 10 * 0.1 + (salary-10)*0.075;
    		}else if(salary > 20 && salary < 40){
    			jj = 10 * 0.1 + 10 * 0.075 + (salary-20) * 0.05;
    		}else if(salary > 40 && salary < 60){
    			jj = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (salary - 40) * 0.03;
    		}else if(salary > 60 && salary < 100){
    			jj = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (salary-60) * 0.015;
    		}else if(salary > 100){
    			jj = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (salary - 100) * 0.01;
    		}
    		//jj = Math.round(jj * 100)/100;
    		System.out.println("当月利润 "+salary+" 万元"+",应当发放奖金总数为:"+jj+" 万元");
    	}
    }
    

      

    【程序13】
    题目:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问
    该数是多少?

    解题思路:遍历需要用到一个循环 while,写一个专门用于判断是不是完全平方数的方法(就是一个数开方后再平方能够等于原数就是了)。用 if 判断就是了。

    /**【程序13】
    *题目:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问
    *该数是多少?
    */
    public class Demo13{
    	public static void main(String[] args){
    		int i = 0;
    		boolean flag = false;
    		while(true){
    			flag = isSqrt(i + 100) && isSqrt(i + 100 + 168);
    			if(flag){
    				System.out.println("这个数是:"+i);
    				break;
    			}else{
    				i++;
    			}
    		}
    	}
    	//判断是不是完全平方数的函数,是就返回 true,反之则返回 false
    	public static boolean isSqrt(int num){
    		int m =(int)Math.sqrt(num);
    		if(m * m == num)
    			return true;
    		return false;
    	}
    }
    

      


    【程序14】
    题目:输入某年某月某日,判断这一天是这一年的第几天?

     解题思路:先要判断是不是闰年((year%4==0)&&(year%100!=0)||(year%400==0)),因为闰年2月会有 29 天,用一个数组存放天数。然后判断出来就行了。

    /**
    *【程序14】
    *题目:输入某年某月某日,判断这一天是这一年的第几天?
    */
    import java.util.Scanner;
    public class Demo14{
    	public static void main(String[] args){
    		Scanner s = new Scanner(System.in);
    		System.out.println("请依次输入年、月、日(格式 2018 8 4)");
    		System.out.print("年:");
    		int year = s.nextInt();
    		System.out.print("月:");
    		int month = s.nextInt();
    		System.out.print("日:");
    		int day = s.nextInt();
    		int[] months ={31,28,31,30,31,30,31,31,30,31,30,31};
    		int totalDay = 0;
    		if((year%4 == 0)&&(year%100 != 0)||(year%400 == 0)){
    			months[1] += 1;
    		}
    		if(month == 1){
    			System.out.println(year+"年"+month+"月"+day+"日是这一年的第"+day+"天");
    		}else{
    			for(int i = 0;i < month-1;i++){
    				totalDay += months[i];
    			}
    			totalDay += day;
    			System.out.println(year+"年"+month+"月"+day+"日是这一年的第"+totalDay+"天");
    		}
    	
    	}
    }
    

      或者使用 switch-case 来进行计算:

    //练习:输入三个数字表示年月日,输出这一天在这一年时第几天
    import java.util.Scanner;
    public class Demo14{
    	public static void main(String[] args){
    		Scanner s = new Scanner(System.in);
    
    	       int year,month,day;
    	     year = s.nextInt();
    	      month = s.nextInt();
    		day = s.nextInt();
    		int sum = 0;
    		//根据月份确定到底要加上多少天
    		switch(month){
    			case 12:sum += 30;
    			//经历 11 月的 30 天
    			case 11:sum += 31;
    			//经历 10 月的 31 天
    			case 10:sum += 30;
    			case 9:sum += 31;
    			case 8:sum += 31;
    			case 7:sum += 30;
    			case 6:sum += 31;
    			case 5:sum += 30;
    			case 4:sum += 31;
    			case 3://加上 2 月平年天数,
    			//闰年和平年的判断
    			if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
    				sum += 29;
    			}else{
    				sum += 28;
    			}
    			
    			case 2:sum += 31;
    			case 1:sum += day;
    			
    		}
    		System.out.println(sum);
    	}
    }
    

      

    【程序15】
    题目:输入三个整数x,y,z,请把这三个数由小到大输出。

    解题思路:用 if 将几种情况分出来,然后输出即可。

    /**【程序15】
    *题目:输入三个整数x,y,z,请把这三个数由小到大输出。
    */
    import java.util.Scanner;
    public class Demo15{
    	public static void main(String[] args){
    		Scanner s = new Scanner(System.in);
    		System.out.println("请输入三个整数:");
    		int m = s.nextInt();
    		int n = s.nextInt();
    		int k = s.nextInt();
    		System.out.print("从小到大的顺序为:");
    		if(m > n){
    			if(n > k){//这里是按顺序的结构
    				System.out.println(k+","+n+","+m);
    			}else if(m > k){//这里是 k > n,k < m 时
    				System.out.println(n+","+k+","+m);
    			}else if(m < k){
    				System.out.println(n+","+m+","+k);
    			}
    		}else if(m > k){//这里就是 m<n的情况
    			System.out.println(k+","+m+","+n);
    		}else if(m < k){
    			if(n > k){
    				System.out.println(m+","+k+","+n);
    			}else if(n < k){
    				System.out.println(m+","+n+","+k);
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    js判断是移动端还是PC端
    如何删除mysql注释
    Javascript库的产生和解读
    zeptojs库解读3之ajax模块
    zeptojs库解读2之事件模块
    zeptojs库解读1之整体框架
    发起图片请求的几种可能性(webkit内核)
    让zend studio 支持 redis函数自动提示
    4种常见的MySQL日志类型
    redis 安装
  • 原文地址:https://www.cnblogs.com/tangdiao/p/9416589.html
Copyright © 2011-2022 走看看