1.指數計算問題
有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數為多少?
程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....
public class Prog1{
??? public static voidmain(String[] args){
??????? int n = 10;
???????System.out.println("第"+n+"個月兔子總數為"+fun(n));
??? }
??? private staticint fun(int n){
??????? if(n==1 ||n==2)
?????????? return 1;
??????? else
?????????? returnfun(n-1)+fun(n-2);
??? }
}
2.指定范圍包含的素數
判斷101-200之間有多少個素數,并輸出所有素數。
程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。
public class Prog2{
??? public static voidmain(String[] args){
??????? int m = 1;
??????? int n = 1000;
??????? int count =0;
??????? //統計素數個數
??????? 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+"個素數");
??? }
??? //判斷素數
??? 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.水仙花數
打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等于該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
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();
??? }
??? //判斷水仙花數
??? 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.分解質因數
將一個正整數分解質因數。例如:輸入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的值,重復執行第一步。
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.條件運算符使用
利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。
程序分析:(a>b)?a:b這是條件運算符的基本例子。
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.公約數和公倍數
輸入兩個正整數m和n,求其最大公約數和最小公倍數。
程序分析:利用輾除法。
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);
??? }
??? //求最大公約數和最小公倍數
??? 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+"的最大公約數為"+yshu);
???????System.out.println(m+"和"+n+"的最小公倍數為"+bshu);
??? }
}
7.統計字符串中類型個數
輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
程序分析:利用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();//將一行字符轉化為字符串
???????scan.close();
??????? count(str);
??? }
??? //統計輸入的字符數
??? 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();//將字符串轉化為字符數組
??????? String[]array_String = new String[array_Char.length];//漢字只能作為字符串處理
??????? for(int i=0;i
?????????array_String[i] = String.valueOf(array_Char[i]);
??????? //遍歷字符串數組中的元素
??????? 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("輸入的漢字個數:"+countChinese);
???????System.out.println("輸入的字母個數:"+countLetter);
???? ???System.out.println("輸入的數字個數:"+countNumber);
???????System.out.println("輸入的空格個數:"+countSpace);
???????System.out.println("輸入的其它字符個數:"+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);
??? }
??? //統計輸入的字符
??? 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);
??????????? //索引結束統計字符數
??????????? 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是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
程序分析:關鍵是計算出每一項的值。
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();//關閉掃描器
???????System.out.println(expressed(2,5)+add(2,5));
??? }
??? //求和表達式
??? 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.指定范圍的完數
一個數如果恰好等于它的因子之和,這個數就稱為"完數"。例如6=1+2+3.編程找出1000以內的所有完數。
public class Prog9{
??? public static voidmain(String[] args){
??????? int n = 10000;
???????compNumber(n);
??? }
??? //求完數
??? private static void compNumber(int n){
???? ???int count = 0;
???????System.out.println(n+"以內的完數:");
??????? for (int i= 1; i <= 10000; i++) {
??????????? inttemp = 0;//定義因子之和變量
??????????? for(int n = 1; n < i / 2 + 1; n++) {
??????????????? if(i % n == 0) {
???????????????????temp += n;//能被整除的除數則被加到temp中
??????????????? }
??????????? }
??????????? if(temp == i) {//如果因子之和與原數相等的話,說明是完數
???????????????System.out.println(i + " ");//輸出完數
??????????? }
??????? }
??? }
}
10.反指數計算
一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地時,共經過多少米?第10次反彈多高?
import java.util.Scanner;
public class Prog10{
??? public static voidmain(String[] args){
???????System.out.print("請輸入小球落地時的高度和求解的次數:");
??????? Scannerscan = new Scanner(System.in).useDelimiter("\\s");
??????? int h =scan.nextInt();
??????? int n =scan.nextInt();
???????scan.close();
???????distance(h,n);
??? }
??? //小球從h高度落下,經n次反彈后經過的距離和反彈的高度
??? private static voiddistance(double h,int n){
??????? doublelength = 0;
??????? for(int i=0;i
??????????? length+= h;
??????????? h *=0.5;
??????????? length+= h;
??????? }
???????System.out.println("經過第"+n+"次反彈后,小球共經過"+length+"米,"+"第"+n+"次反彈高度為"+h+"米");
??? }
}
如果有想從事java開發或者需要2018學習資料的小伙伴,可以私信我【工作】或者【資料】,我會第一時間回復你哦