java算法面試題_第1頁
java算法面試題_第2頁
java算法面試題_第3頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、JAVA經典算法40題(供面試所用)現在是3月份,也是每年開年企業公司招聘的高峰期,同時有許多的朋友也出來找工作。現在的招聘他們有時會給你 面試題或者智力測試題,也有的直接讓你上機操作,寫一段程序。算法的計算不乏岀現,基于這個原因我自己 法上的題型。希望對于大家有所幫助。岀一套搜集了一些算【程序4】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第四個月后每個對兔子,假如兔子都不死,問每個月的兔子總數為多少?月又生一1 .程序分析:兔子的規律為數列1,1,2,3,5,8,13,2112345678910111213public class exp2public s

2、tatic void main(String args)int i=0;for(i=l;i=20;i+)System.out ? printIn(f(i);public static int f(irit x)if(x=l | x=2)return 1;elsereturn f(x-l)+f(x-2);1415或1617181920212223public class exp2public static void main(String args)int i=0;math mymath = new math();for(i=l;i=20;i+)System.out ? println(myma

3、th.A(i);24 25 class math27public int f(int x)2829if(x=l | x=2)30wturn 1;31else32return f(x-l)+f(x-2);3334【程序2】 題目判斷101-200之間有多少個素數,并輸出所有素數。1 .程序分析:判斷素數的方法:用一個數分別去除2到sqrt (這個數),如果能被整除則表明此數不是素數,反之是素數。1public class exp22public static void main(String args)3int i=0;4math mymath = new math();5for(i=2;i=2

4、00;i+)6if(mymath ? iszhishu(i)=true)7System, ou t. printing);8910class math1112public intx)1314if(x=l | x=2)15return 1;16else17return f(x-l)+f(x-2);1819public boolean iszhishu(int x)20212223242526for(int i=2;i=x/2;i+)if (x % 2=0 )return false;return true;【程序3】 題目:打印出所有的”水仙花數”,所謂”水仙花數”是指一個三位數,其各位數字立方

5、和等于該數本身。例如:153是一個水仙花數,因為153=1的三次方+5的三次方+3的三次方。1 .程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。1 public class exp22345678public static void main(String args)int i=0;math mymath = new math();for(i=100;i=999;i+)if(mymath.shuixianhua(i)rue)Sys tem.out ? print.n(i);10 class math111213141516171819202122public i

6、nt f(int x)if(x=l | x=2)return 1;elsereturn f(x-l)+f(x-2);public boolean iszhishu(int x)for(int i=2;ik,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你,重復執行第一步。(3) 如果n不能被k整除,則用k+1作為k的值,重復執行第一步。1public class exp22public exp2()3public void fengjie(int n)4for(int i=2;i =90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。1 .程序分析:(a

7、 b)?a:b這是條件運算符的基本例子。12mport javax.swing.*;3public class ex5 4public static void main(String args)5String str=6str=30ptionPane.showlnputDialog(”請輸入N的值(輸入exit 退出):);7int N;8N=0;9try10N=lnteger.parseint(str);1112catch(NumberFormatException e)13e.printStackTrace();1415str=(N90 ?A:(N 60 ?B:C);16System.ou

8、t ? printlnCstr);1718【程序6】 題目:輸入兩個正整數 m和n,求其最大公約數和最小公倍數。1 .程序分析:利用輾除法。1最大公約數:2public class CommonDivisor3public static void main(String args)45commonDivisor(24,32);67static int commonDivisor(int M, int N)89if(N0|M0)1011System.out.println(ERROR!);12return1314if(N=0)1516System.out ? println(the bigges

9、t common divisor is :” +M);17wturn M;1819return commonDivisor(N,M%N);202122最小公倍數和最大公約數:23import java ? util.Seanner;24public class CandC2526下面的方法是求出最大公約數27public static int gcd(intint n)2829while (true)3031if (m = m % n) = 0)32return n;33if (n = n % m) = 0)34return m;353637public static void main(St

10、ring args) throws Exception3839取得輸入值40/Seanner chin = new Seanner(System.in);41/int a = chin? nextTnt(), b = chin.nextint();42int a=23; int b=32;43int c = gcd(a, b);44System. out. printin (最小公倍數:+ a*b/c +n 最大公約數:+ c);4546【程序7】 題目:輸入一行字符,分別統計岀其中英文字母、空格、數字和其它字符的個數。1 .程序分析:利用 while語句,條件為輸入的字符不為n1er;2pu

11、blic class ex7 3public static void main(String args)4System. out. printin(請輸入字符串:”);Seanner sean=new Seanner(System.in);String str=scan.next();String El=u4e00-u9fa5String E2=a-zA-Zint countH=0;int countE=0;char arrChar=str.toCharArray();String arrStr=new StringarrChar.length;for (int i=0;iaMChar.len

12、gth ;i+ )arrStri=String.valueOf(arrChari);for (String i: arrStr )if (i.matches(El) countH+;if (i.matches(E2)countE+;System, out. println(漢字的個數 +countH);System, out. println(字母的個數 +countE);【程序 8 題目:求 s=a+aa+aaa+aaaa+aa.a 的值,其中 a是一個數字。例女口 2+22+222+2222+22222(A時共有5個數相加) , 幾個數相加有鍵盤控制。1 . 程序分析:關鍵是計算出每一項的

13、值。import java.io.*;public class Sumloop public static void main(String args) throws IOExceptionint s=0;String output=”;BufferedReader stadin = new BufferedReader(new TnputstreamReadeMSystem.in); System. out. printin (請輸入 a 的值” );String input adin.readLine();for(int i nteger.parselnt(input);i+)output

14、+=input;int a=Integer.parseint(output);s+=a;System.out ? printIn(s);另解:import java ? io.*;public class Sumloop public static void main(String args) throws IOExceptionint s=0;int n;intBufferedReader stadin = new BufferedReader(new InputStreamReader(System.in); String input = stadin.readLine();n=Tnteg

15、er ? parseint(input);for(int i=l;i=n;i+)t=t*10+n;s=s+t;Sys tem.out. print.n(t);System.out ? printIn(s);【程序9】 題目:一個數如果恰好等于它的因子之和,這個數就稱為 所有完數。完數”。例如6=1+2+3.編程 找出1000以內的1public class Wanshu 2public static void main(String args)34int s;5for(int i=l;i=1000;i+)67S=0 ;8for(int j=l;ji;j+)9if(i % j=0)10s=s+j

16、;11if(s=i)12System.out.print(i+);1314System.out ? printIn();1516【程序10題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地 時,共經過多少米?第10次反彈多高?1public class ExlO 2public static void main(String args)34double s=0;5double t=100;6for(int i=l;i=10;i+)78S+=t ;9t=t/2;1011System.out ? println(s);12System.out.println

17、(t);131415【程序11題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列1public class Wanshu 2public static void main(String args)34int i=0;5int j=0;6int k=0;7int t=0;8for(i=l;i=4;i+)9for(j=l;jv=4;j+)10for(k=l;k=4;k+)11if(i!=j & j!=k & i!=k)12t+=l;13System.out.print

18、ln(i*100+j*10+k);1415System.out.println (t);1617【程序12】 題目:企業發放的獎金根據利潤提成。利潤低于或等于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 %提成,從鍵盤輸入當月利潤I,求應發放獎金總數?1 .程序分析:請利用數軸來分界,定位

19、。注意定義時需把獎金定義成長整型。1mport java .util.*;2public class test 3public static void main (Stringargs)4double sum;/聲明要儲存的變量應發的獎金5Seanner input =new Seanner (System.in);導入掃描器6System ? out. print(輸入當月利潤);7double lirun=input .nextDouble();從控制臺錄入利潤8if(lirun=1OOOOO)(9sum=lirun*0.1;10else if (lirun=200000)11sum=10

20、000+lirun*0.075;12else if (lirun=400000)13sum=17500+lirun*0.05;14else if (lirun=600000)15sum=lirun*0.03;16else if (lirun=1000000)(17sum=lirun*0.015;18 else19sum=lirun*0.01;2021System. out. print In (應發的獎金是+sum);2223后面其他情況的代碼可以由讀者自行完善?【程序13】題目:一個整數,它加上 100后是一個完全平方數,加上 168又是一個完全平方數,請問該數是多少?1?程序分析:在10萬

21、以內判斷,先將該數加上 100后再開方,再將該數加上 268后再開方,如果開方后的結果滿足如下條件,即是結果。請看具體分析:public class test 123456public static void main (Stringargs) long k=0;for(k=l;ky則將x與y的值進行交換,然后再用x與z進行比較,如果xz則將x與z的值進行交換,這樣能使 x最小。import java.util.*;public class test public static void main (Stringargs)int i=0;int j=0;int k=0;int x=0;Syst

22、em. out. print( 請輸入三個數 n);nextlnt();Seanner input = new Seanner(Systeirkin); i=input j=input ? nextlnt();k=input ? nextlnt(); x=i;i=j ;j=x ;if(ik)x=i ;i=k; k=x; if(jk)x=j;j=k ;k=x;System.out.printIn(i+, +j+, +k);程序16 】題目:輸出 9*9 口訣。1 . 程序分析:分行與列考慮,共 9 行 9 列, i 控制行, j 控制列public class jiujiu public sta

23、tic void main(String args)int i=0;int j=0;for(i=l;i=9;i+)for(j=l;jv=9;j+)System.out.print(i+*+j+=+i*j+t);System.out.println();不出現重復的乘積(下三角)public class jiujiu public static void main(String args)int i=0;int j=0;for(i=l;i=9;i+) for(j=l;jv=i;j+)System.out.print(i+*+j+=+i*j+t);System.out ? println();上三

24、角public class jiujiu public static void main(String args)int i=0;31int j=0;32for(i=l;i=9;i+)33 for(j=i;j=9;j+)34System.out.print(i+*+j+=+i*j+t);35System, ou t. printlnO;363738【程序17題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第 10天早上想 再吃時,見只剩下一個桃子了。求第一天共摘了多少。第二天早上又將剩1

25、 ?程序分析:采取逆向思維的方法,從后往前推斷。public class猴子吃桃static int total(int day)if(day = 10)return 1;elsereturn (total(day+1)+1)*2;10public static void main(String args)11121314System.out.printin(total(l);【程序18】 題目:兩個乒乓球隊進行比賽,各出三人。甲隊為 a,b,c三人,乙隊為x,y,z 三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。1 ?程序

26、分析:判斷素數的方法:用一個數分別去除2到sqrt (這個數),如果能被整除,則表明此數不是素數,反之是素數。【程序19】題目打印出如下圖案(菱形)1 .程序分析:先把圖形分成兩部分來看待,前四行一個規律,后三行一個規律,利用雙重for循環,第一層控制行,第二層控制列。三角形:public class StartG public static void main(String args)int i=0;int j=0;for(i=l;i=4;i+) for(j=l;j=l;i_) for(j=l;j=2*i-3;j+)System.out ? print(System.out.println(

27、”);* );”);16171819菱形:20public class StartG 21public static void main(String args)2223int i=0;24int25for(i=l;i=4;i+)2627for(int k=l; k=l;i-)3435for(int k=l; k=5-i;k+)36(” ;37for(j=l;j=2*i-3;j+)38System.out.print(*);39System.out.pr ” ;404142求出這個數列的前 20項之和。【程序20】 題目:有一分數序列:2/1,3/2, 5/3, 8/5, 13/& 21/13

28、1.程序分析:請抓住分子與分母的變化規律。1 public class test20 public static void main(String args) 3float fm = If;4float fz = If;5float temp;6float sum = 0f;7for (int i=0;i20;i+)8temp = fm;9fm = fz;10fz = fz + temp;11sum += fz/fm;12/System.out? println(sum);1314System.out.println(sum);1516【程序21】 題目:求1+2!+3!+20!的和1.程序分

29、析:此程序只是把累加變成了累乘1public class Ex21 2static long sum = 0;3static long fac = 0;4public static void main(String args) 5long sum = 0;6long fac = 1;7for(int i=l; i 1) 16value = n * recursion(n? 1);1718retuni value;192021【程序23】題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第 3個人大2歲。問第三個人,又說比第 2人大兩歲。問第2個人,說比第一個

30、人大兩歲。最后問第一個人,他說是 10歲。請問第五個人多大?1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,類需知道第四人的歲數,依次推,推到第一人(10歲),再往回推。12public class Ex23 static int getAge(int n)if (n=l)return 10;return 2 +1);public static void main(String args) System. out. printin ( ”第五個的年齡為 : +getAge(5);程序 24 】 題目:給一個不多于 5 位的正整數,要求:一、求它是幾位數,二、逆序

31、打印出各位數字import java.util.Seanner;public class Ex24 public static void main(String args) Ex24 tn = new Ex24();Seanner s = new Seanner(System.in); long a = s.nextLong();if(a 100000) System.out ? println(Error Input, please run this program Again);System.exit(0);if(a =0 & a = 10 & a = 100 & a = 1000 & a

32、 = 10000 & a =0; i-) System.out ? print(chi); 【程序25】 題目:一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同1 public class Ex25 static inta = new int 5;static int b = new irrt 5;public static voidmain(String args) boolean is=false;Scanner s =new Scanner(System.In); long1 = s.nextLong();if (1 99999)| (1 = 0; i

33、)ai = (int) (1 / (long) Math.pow(10, i);1 = (1 % (long) Math.poA(10, i);System. out.printin();for (int i = 0, j = 0; i 5; i+, j+)bj = ai;for (int i = 0, j = 4; i 5; i+, j-)if (ai != 5j) is = false;break; else is = true;if (is = false) System. out .println(is not a Palindrom!n); else if (is = true) S

34、ystem. out.println(is a Palindrom!);判斷第二個字母。【程序26】 題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續if語句判斷第二個字母1.程序分析:用情況語句比較好,如果第一個字母一樣,則判斷用情況語句或1mport java.util.Scanner;2public class Ex26 3public static void main(String args)4/保存用戶輸入的第二個字母5char weekSecond;6/將Scanner類示例化為input對象,用于接收用戶輸入7Seanner input = new S

35、eanner(System.in);開始提示并接收用戶控制臺輸入System.out ? print(請輸入星期值央文的第一個子母,我來幫您判斷是星期幾:);String letter = input.next();/判斷用戶控制臺輸入字符串長度是否是一個字母if (letter.length() = 1)利用取第一個索引位的字符來實現讓 Scanner接收char類型輸入char weekFirst = letter.charAt(O);switch (weekFirst)case m:/當輸入小寫字母時,利用switch 結構特性執行下一個帶break語句的case分支,以實現忽略用戶控制

36、臺輸入大小寫敏感的功能控制臺錯誤提示 else(”輸入錯誤,不能識別的星期值第二個字母,程序結束!“);44break:weekSecond = letter.charAt(O);/利用或(|)運算符來實現忽略用戶控制臺輸入大小寫敏感的功能if (weekSecond = A | weekSecond = a)System, out. printin(”星期六(Saturday);break;/利用或(|)運算符來實現忽略用戶控制臺輸入大小寫敏感的功能 else if (weekSecond = U | weekSecond = u)80System ? out.println(星期日(Sun

37、day );81break;82控制臺錯誤提示83 else8485輸入錯誤,不能識別的星期值第二個字母,程序結束!“); break;8687 else88控制臺錯誤提示89System. out. printin(輸入錯誤,只能輸入一個字母,程序結束!”);90break;9192default:93控制臺錯誤提示94System. out. print In(輸入錯誤,不能識別的星期值第一個字母,程序結束!”);break;95 else控制臺錯誤提示System.out.printin(輸入錯誤,只能輸入一個字母,程序結束!”);【程序27】 題目求100之內的素數1public cl

38、ass Ex27 2public static void main(String args)34int sum ;5for(sum=2;sum=100;sum+)67for(i=2;isum/2)13System, out .print In (sum+是素數”;141516【程序28】 題目:對10個數進行排序1mport java ? uti1.Arrays;2mport java ? util.Random;3mport java.util.Sca rm er;4public class Ex28 5public static void main(String args) 6int am = new in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論