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);
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础
    Android Studio 单刷《第一行代码》系列 04 —— Activity 相关
    Android Studio 单刷《第一行代码》系列 03 —— Activity 基础
    Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat
    Android Studio 单刷《第一行代码》系列 01 —— 第一战 HelloWorld
    IDEA 内网手动添加oracle,mysql等数据源,以及server returns invalid timezone错误配置
    eclipse maven设置
    IntelliJ IDE 常用配置
    eclipse maven 常见问题解决方案
    Maven 安装和配置
  • 原文地址:https://www.cnblogs.com/tangdiao/p/9416589.html
Copyright © 2011-2022 走看看