10道Java基礎(chǔ)編程練習(xí)題

1.指數(shù)計算問題

有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數(shù)為多少?

程序分析: 兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....

public class Prog1{

??? public static voidmain(String[] args){

??????? int n = 10;

???????System.out.println("第"+n+"個月兔子總數(shù)為"+fun(n));

??? }

??? private staticint fun(int n){

??????? if(n==1 ||n==2)

?????????? return 1;

??????? else

?????????? returnfun(n-1)+fun(n-2);

??? }

}

2.指定范圍包含的素數(shù)

判斷101-200之間有多少個素數(shù),并輸出所有素數(shù)。

程序分析:判斷素數(shù)的方法:用一個數(shù)分別去除2到sqrt(這個數(shù)),如果能被整除,則表明此數(shù)不是素數(shù),反之是素數(shù)。

public class Prog2{

??? public static voidmain(String[] args){

??????? int m = 1;

??????? int n = 1000;

??????? int count =0;

??????? //統(tǒng)計素數(shù)個數(shù)

??????? for(inti=m;i

??????????? if(isPrime(i)){

???????????????count++;

??????????????? System.out.print(i+"");

??????????????? if(count%10==0){

???????????????????System.out.println();

??????????????? }

??????????? }

??????? }

???????System.out.println();

???????System.out.println("在"+m+"和"+n+"之間共有"+count+"個素數(shù)");

??? }

??? //判斷素數(shù)

??? private staticboolean isPrime(int n){

??????? booleanflag = true;

??????? if(n==1)

????????? flag = false;

??????? else{

??????????? for(inti=2;i<=Math.sqrt(n);i++){

??????????? if((n%i)==0|| n==1){

???????????????flag = false;

??????????????? break;

??????????? }

???????????? else

?????????????? flag= true;

????????? }

??????? }

??????? returnflag;

??? }

}

3.水仙花數(shù)

打印出所有的"水仙花數(shù)",所謂"水仙花數(shù)"是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個"水仙花數(shù)",因為153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循環(huán)控制100-999個數(shù),每個數(shù)分解出個位,十位,百位。

public class Prog3{

??? public static voidmain(String[] args){

??????? for(int i=100;i<1000;i++){

??????????? if(isLotus(i))

??????????????System.out.print(i+" ");

??????? }

???????System.out.println();

??? }

??? //判斷水仙花數(shù)

??? private staticboolean isLotus(int lotus){

??????? int m = 0;

??????? int n =lotus;

??????? int sum = 0;

??????? m = n/100;

??????? n? -= m*100;

??????? sum =m*m*m;

??????? m = n/10;

??????? n -= m*10;

??????? sum +=m*m*m + n*n*n;

??????? if(sum==lotus)

??????????? return true;

??????? else

??????????? return false;

??????? }

}

4.分解質(zhì)因數(shù)

將一個正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5。

程序分析:對n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個最小的質(zhì)數(shù)k,然后按下述步驟完成:

(1)如果這個質(zhì)數(shù)恰等于n,則說明分解質(zhì)因數(shù)的過程已經(jīng)結(jié)束,打印出即可。

(2)如果n<>k,但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)n,重復(fù)執(zhí)行第一步。

(3)如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行第一步。


public class Prog4{

??? public static voidmain(String[] args){

??????? int n = 13;

???????decompose(n);

??? }

??? private static voiddecompose(int n){

???????System.out.print(n+"=");

??????? for(int i=2;i

??????????? while(n%i==0&& n!=i){

?????????????? ?n/=i;

???????????????System.out.print(i+"*");

??????????? }

??????????? if(n==i){

???????????????System.out.println(i);

??????????????? break;

??????????? }

??????? }

??? }

}

5.條件運(yùn)算符使用

利用條件運(yùn)算符的嵌套來完成此題:學(xué)習(xí)成績>=90分的同學(xué)用A表示,60-89分之間的用B表示,60分以下的用C表示。

程序分析:(a>b)?a:b這是條件運(yùn)算符的基本例子。

public class Prog5{

??? public static voidmain(String[] args){

??????? int n = -1;

??????? try{

??????????? n =Integer.parseInt(args[0]);

??????? }catch(ArrayIndexOutOfBoundsExceptione){

???????????System.out.println("請輸入成績");

????? ??????return;

??????? }

??????? grade(n);

??? }

??? //成績等級計算

??? private static voidgrade(int n){

??????? if(n>100|| n<0)

?????????System.out.println("輸入無效");

??????? else{

????????? Stringstr = (n>=90)?"分,屬于A等":((n>60)?"分,屬于B等":"分,屬于C等");

????????? System.out.println(n+str);

??????? }

??? }

}

6.公約數(shù)和公倍數(shù)

輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。

程序分析:利用輾除法。

public class Prog6{

??? public static voidmain(String[] args){

??????? int m,n;

??????? try{

??????????? m =Integer.parseInt(args[0]);

??????????? n =Integer.parseInt(args[1]);

??????? }catch(ArrayIndexOutOfBoundsExceptione){

???????????System.out.println("輸入有誤");

??????????? return;

??????? }

???????max_min(m,n);

??? }

??? //求最大公約數(shù)和最小公倍數(shù)

??? private static voidmax_min(int m, int n){

??????? int temp = 1;

?? ?????int yshu = 1;

??????? int bshu =m*n;

??????? if(n

??????????? temp =n;

??????????? n = m;

??????????? m =temp;

??????? }

??????? while(m!=0){

??????????? temp =n%m;

??????????? n = m;

??????????? m =temp;

??????? }

??????? yshu = n;

??????? bshu /= n;

???????System.out.println(m+"和"+n+"的最大公約數(shù)為"+yshu);

???????System.out.println(m+"和"+n+"的最小公倍數(shù)為"+bshu);

??? }

}

7.統(tǒng)計字符串中類型個數(shù)

輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。

程序分析:利用while語句,條件為輸入的字符不為'\n'.

import java.util.Scanner;

public class Prog7_1{

??? public static voidmain(String[] args){

???????System.out.print("請輸入一串字符:");

??????? Scannerscan = new Scanner(System.in);

??????? String str= scan.nextLine();//將一行字符轉(zhuǎn)化為字符串

???????scan.close();

??????? count(str);

??? }

??? //統(tǒng)計輸入的字符數(shù)

??? private static voidcount(String str){

??????? String E1 ="[\u4e00-\u9fa5]";//漢字

??????? String E2 ="[a-zA-Z]";

??????? String E3 ="[0-9]";

??????? String E4 ="\\s";//空格

??????? intcountChinese = 0;

??????? intcountLetter = 0;

??????? intcountNumber = 0;

? ??????int countSpace = 0;

??????? intcountOther = 0;

??????? char[]array_Char = str.toCharArray();//將字符串轉(zhuǎn)化為字符數(shù)組

??????? String[]array_String = new String[array_Char.length];//漢字只能作為字符串處理

??????? for(int i=0;i

?????????array_String[i] = String.valueOf(array_Char[i]);

??????? //遍歷字符串?dāng)?shù)組中的元素

??????? for(Strings:array_String){

??????????? if(s.matches(E1))

?????????????countChinese++;

??????????? else if(s.matches(E2))

?????????????countLetter++;

??????????? else if(s.matches(E3))

????????????? countNumber++;

??????????? else if(s.matches(E4))

?????????????countSpace++;

??????????? else

?????????????countOther++;

??????? }

???????System.out.println("輸入的漢字個數(shù):"+countChinese);

???????System.out.println("輸入的字母個數(shù):"+countLetter);

???? ???System.out.println("輸入的數(shù)字個數(shù):"+countNumber);

???????System.out.println("輸入的空格個數(shù):"+countSpace);

???????System.out.println("輸入的其它字符個數(shù):"+countSpace);

??? }

}


import java.util.*;

public class Prog7_2{

??? public static voidmain(String[] args){

????? System.out.println("請輸入一行字符:");

????? Scanner scan= new Scanner(System.in);

????? String str =scan.nextLine();

????? scan.close();

????? count(str);

??? }

??? //統(tǒng)計輸入的字符

??? private static voidcount(String str){

??????? Listlist = new ArrayList();

??????? char[]array_Char = str.toCharArray();

??????? for(charc:array_Char)

????????? list.add(String.valueOf(c));//將字符作為字符串添加到list表中

???????Collections.sort(list);//排序

??????? for(Strings:list){

??????????? intbegin = list.indexOf(s);

??? ????????int end = list.lastIndexOf(s);

??????????? //索引結(jié)束統(tǒng)計字符數(shù)

??????????? if(list.get(end)==s)

?????????????System.out.println("字符‘"+s+"’有"+(end-begin+1)+"個");

??????? }

??? }

}

8.求s=a+aa+aaa+aaaa+aa...a的值

求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時共有5個數(shù)相加),幾個數(shù)相加有鍵盤控制。

程序分析:關(guān)鍵是計算出每一項的值。

import java.util.Scanner;


public class Prog8{

??? public static voidmain(String[] args){

???????System.out.print("求s=a+aa+aaa+aaaa+...的值,請輸入a的值:");

??????? Scannerscan = new Scanner(System.in).useDelimiter("\\s*");//以空格作為分隔符

??????? int a =scan.nextInt();

??????? int n =scan.nextInt();

???????scan.close();//關(guān)閉掃描器

???????System.out.println(expressed(2,5)+add(2,5));

??? }

??? //求和表達(dá)式

??? private static Stringexpressed(int a,int n){

??????? StringBuffersb = new StringBuffer();

???????StringBuffer subSB = new StringBuffer();

??????? for(int i=1;i

????????? subSB =subSB.append(a);

????????? sb =sb.append(subSB);

????????? if(i

??????????? sb =sb.append("+");

??????? }

??????? sb.append("=");

??????? returnsb.toString();

??? }

??? //求和

??? private staticlong add(int a,int n){

??????? long sum = 0;

??????? long subSUM= 0;

??????? for(int i=1;i

??????????? subSUM= subSUM*10+a;

??????????? sum =sum+subSUM;

??????? }

??????? return sum;

??? }

}

9.指定范圍的完數(shù)

一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為"完數(shù)"。例如6=1+2+3.編程找出1000以內(nèi)的所有完數(shù)。

public class Prog9{

??? public static voidmain(String[] args){

??????? int n = 10000;

???????compNumber(n);

??? }

??? //求完數(shù)

??? private static void compNumber(int n){

???? ???int count = 0;

???????System.out.println(n+"以內(nèi)的完數(shù):");

??????? for (int i= 1; i <= 10000; i++) {

??????????? inttemp = 0;//定義因子之和變量

??????????? for(int n = 1; n < i / 2 + 1; n++) {

??????????????? if(i % n == 0) {

???????????????????temp += n;//能被整除的除數(shù)則被加到temp中

??????????????? }

??????????? }

??????????? if(temp == i) {//如果因子之和與原數(shù)相等的話,說明是完數(shù)

???????????????System.out.println(i + " ");//輸出完數(shù)

??????????? }

??????? }

??? }

}

10.反指數(shù)計算

一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地時,共經(jīng)過多少米?第10次反彈多高?

import java.util.Scanner;

public class Prog10{

??? public static voidmain(String[] args){

???????System.out.print("請輸入小球落地時的高度和求解的次數(shù):");

??????? Scannerscan = new Scanner(System.in).useDelimiter("\\s");

??????? int h =scan.nextInt();

??????? int n =scan.nextInt();

???????scan.close();

???????distance(h,n);

??? }


??? //小球從h高度落下,經(jīng)n次反彈后經(jīng)過的距離和反彈的高度

??? private static voiddistance(double h,int n){

??????? doublelength = 0;

??????? for(int i=0;i

??????????? length+= h;

??????????? h *=0.5;

??????????? length+= h;

??????? }

???????System.out.println("經(jīng)過第"+n+"次反彈后,小球共經(jīng)過"+length+"米,"+"第"+n+"次反彈高度為"+h+"米");

??? }

}

如果有想從事java開發(fā)或者需要2018學(xué)習(xí)資料的小伙伴,可以私信我【工作】或者【資料】,我會第一時間回復(fù)你哦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 50道經(jīng)典Java編程練習(xí)題,將數(shù)學(xué)思維運(yùn)用到編程中來。抱歉哈找不到文章的原貼了,有冒犯的麻煩知會聲哈~ 1.指數(shù)...
    OSET我要編程閱讀 7,009評論 0 9
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,152評論 0 41
  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 1,894評論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,739評論 18 399
  • 時間如一場夢,時間如那正在燃燒的木頭,時間如一個擁抱,時間就如你的眼睛一眨一眨。 ...
    海似你眼眸讓我看不透閱讀 233評論 0 0