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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM