一些基礎入門的JAVA算法題與自己的解答(僅供參考)

1.

package simple;

import java.util.Scanner;
/*
 * 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),
 * 幾個數相加有鍵盤控制。   
 * 心得:求a的b次方:Math.pow(a,b);
 * 對於一個重複使用的參數,若置於循環裏,必須注意每次循環的頭部是否需要初始化。
 * */
public class aaANDaaaANDaaaa {
	public static void main(String args[]) {
		int number,count,nextNumber=0,result=0;
		Scanner scan=new Scanner(System.in);
		System.out.println("請輸入數字和累加次數");
		number=scan.nextInt();
		count=scan.nextInt();
		for(int i=1;i<count+1;i++) {
			nextNumber=0;
			for(int j=0;j<i;j++) {
			nextNumber+=(int) (number*Math.pow(10, j));
			}
			result+=nextNumber;
		}
		System.out.println("結果爲"+result);
	}
}

2.

package simple;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/*
 * ArrayList默認排序是按照插入順序
 * 可以通過重載Comparator<T>來實現Collections.sort(List);的自定義排序
 * */
public class arrayListSort {
	public static void main(String args[]) {
	ArrayList<Integer> alist=new ArrayList<Integer>();
	alist.add(123);
	alist.add(0);
	alist.add(998);
	for(int i:alist) {
		System.out.print(i+" ");
	}
	Collections.sort(alist);
	System.out.println("\n"+"排序後");
	for(int i:alist) {
		System.out.print(i+" ");
	}
}
	}
class sortByInt implements Comparator<Integer>{

	@Override
	public int compare(Integer o1, Integer o2) {
		// TODO Auto-generated method stub
		if(o1>o2) {
			return 1;
		}
		else {
		return -1;}
	}
	
}

3.

package simple;

import java.util.Arrays;
/*
 * 對一串數組排序
 * */
public class arrSort {
	public static void main(String args[]) {
		int[] arr= {1,5,3,100,55,312,4,712,34};
		for(int i:arr) {
		System.out.print(i+"  ");}
		Arrays.sort(arr);
		System.out.println("Arrays.sort(arr)排序後");
		for(int i:arr) {
		System.out.print(i+" ");}
	}
}

4.

package simple;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

//import com.sun.java.util.jar.pack.ConstantPool.Entry;

/*
 * 輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
 * 心得:String.toCharArray()將字符串變爲字符數組,換行符不計入
 * 		Character.isLetter(Char c)判斷是否爲中英字母
 * 		Character.isWhitespace(Char c)判斷是否爲空白字符
 * 		Character.isDigit(Char c)判斷是否爲數字
 * 		遍歷map的迭代器
 * 		Iteractor<Entry<Key,Value>> it=map.entrySet().iterator();
 * */
public class character_Fun {
	public static void main(String args[]) {
		//Character x='2';
		String s=null;
		Scanner scan=new Scanner(System.in);
		System.out.println("請輸入字符串");
		s=scan.nextLine();
		Map<String,Integer> map=new <String,Integer>HashMap();
		map.put("English",0);
		map.put("whiteSpace", 0);
		map.put("number",0);
		char []stringToChar=s.toCharArray();
		for(int i=0;i<stringToChar.length;i++) {
			
			if(Character.isLetter(stringToChar[i])) {
				map.put("English",map.get("English")+1);
			}
			if(Character.isDigit(stringToChar[i])) {
				map.put("number", map.get("number")+1);
			}
			if(Character.isWhitespace(stringToChar[i])) {
				map.put("whiteSpace", map.get("whiteSpace")+1);
			}
		}
		Iterator<Entry<String,Integer>> it=map.entrySet().iterator();
		Entry <String,Integer>[]entry=new Entry[3];
		int i=0;
		while(it.hasNext()) {
			entry[i++]=it.next();
			
		}
		for(int j=0;j<entry.length;j++) {
			switch(entry[j].getKey()) {
			case "English":
				System.out.println("中英文字符數量爲"+entry[j].getValue());
				break;
			case "whiteSpace":
				System.out.println("空白字符數量爲"+entry[j].getValue());
				break;
			case "number":
				System.out.println("數字數量爲"+entry[j].getValue());
				break;
			default:
				System.out.println("entry錄入了其它鍵值對");
				break;
			}
		}
	}
}

5.

package simple;

import java.util.LinkedList;
import java.util.List;
/*
 * 一個數如果恰好等於它的因子之和,這個數就稱爲 "完數 "。例如6=1+2+3.編程     找出1000以內的所有完數  
 * 心得:是LinkedList,注意ed。
 * 		一般來說,嵌套循環中i比j大(外層循環比內層循環大),記住這個有助於自己在寫一些判斷條件時不至於寫反了(這種錯誤很不容易找到)
 * */
public class completeNumber {
	public static void main(String args[]) {
		int number,n=0;
		List<Integer>list=new LinkedList<Integer>();
		List<Integer>eleList=new LinkedList<Integer>();
		for(int i=1;i<1001;i++) {
			n=0;
			for(int j=1;j<i;j++) {
				if(i%(double)j==0&&j!=i) {
					eleList.add(j);
				}
				
			}
			for(int m=0;m<eleList.size();m++) {
				n+=eleList.get(m);
			}
			eleList.clear();
			if(n==i) {
				System.out.println("找到完數"+i);
			}
		}
	}
}

6.

package simple;

import java.util.Scanner;
/*
	一個球從指定高度落下,每次反彈都到達下落高度的一半,請計算出第十次反彈高度和總路徑長度。
*/
public class fallingBall {
	public static void main(String args[]) {
		double allHeight=0,height;
		Scanner scan=new Scanner(System.in);
		height=scan.nextDouble();
		for(int i=0;i<10;i++) {
			height=reBound(height);
			allHeight+=height;
		}
		System.out.println("全程"+allHeight);
		System.out.println("第十次"+reBound(height));
	}
	public static double reBound(double height) {
		return height/2;
	}
}

7.

package simple;
/*
 * 有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。 
 * */
public class fenshu {
	public static void main(String args[]) {
		double result=0;
		double n=2,m=1,k=n;
		for(int i=0;i<20;i++) {
			result+=n/m;
			n=n+m;
			m=k;
			k=n;
			System.out.print(n+"/"+m+"+");
		}
		System.out.println("結果爲"+result);
	}
}

8.

package simple;

import java.util.Scanner;
/*
 * 判斷101-200之間有多少個素數,並輸出所有素數。
 * Math.ceil(Double)向上取整
 * Math.floor(Double)向下取整
 * Math.round(Double)四捨五入
 * */
public class findSuShu {
	public static void main(String []args) {
		for(int i=101;i<=200;i++) {
			for(double j=2;j<8;j++) {
				if(Math.ceil(i%j)==0) {
					System.out.println(i+"是素數");
					break;
				}
				
			}
		}
	}
}

9.

package simple;

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
/*
 * 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。 
 * 體會:對於循環的結束時的操作一定要慎重考慮 
 * */
public class getZhiYinShu {
	public static void main(String args[]) {
		int number;
		List<Integer>list=new LinkedList<Integer>();
		Scanner scan=new Scanner(System.in);
		System.out.println("請輸入任意正整數");
		number=scan.nextInt();
		boolean flag=true;
		boolean fineNumber=false;
		int smallNumber=0;
		while(flag) {
			fineNumber=false;
			for(double i=2;i<=number;i++) {
				if(number%i==0) {
					for(int j=2;j<=i;j++) {
						if(j%i==0&&j==i) {
							fineNumber=true;
							break;
						}
						else if(j%i==0) {
							fineNumber=false;
							break;
						}
					}
					if(fineNumber==true) {
						list.add((int) i);
						number=(int) (number/i);
						if(number<i) {
							//list.add((int) i);
							flag=false;
						}
						break;
					}
					
					
				}
			}
			//flag=false;
		}
		for(int i=0;i<list.size();i++) {
			System.out.println("獲得質因數"+list.get(i));
		}
	}
}

10.

package simple;

import java.util.Arrays;
import java.util.Scanner;
/*
 * 將一個數字插入到一個已經排好順序的數組中//我僅實現了從小到大排序,從大到小同理,開頭對排序方式已經進行了判斷
 * 心得:數組擴容:將一個數組拷貝到另一個數組中。
 * 				方法:int b[]=Arrays.copyOf(a,a.lenghth+x);
 * */
public class insertInToSorted {
	public static void main(String args[]) {
		int a[]= {1,2,3,4,4,52,55,66,467};
		boolean isBigSort=true;
		for(int i=0;i<a.length-1;i++) {
			if(a[i]>a[i+1]) {
				isBigSort=false;
			}
			else if(a[i]<a[i+1]) {
				isBigSort=true;
			}
		}
		int b[];
		b=Arrays.copyOf(a,a.length+1);
		int k,m,n;
		Scanner scan=new Scanner(System.in);
		k=scan.nextInt();
		for(int i=0;i<b.length-1;i++) {
			if(k<b[i]||i==b.length-2) {
				m=b[i];
				b[i]=k;
				for(int j=i;j<b.length-1;j++) {
					n=b[j+1];
					b[j+1]=m;
					m=n;
				}
				break;
			}
		}
		for(int i:b) {
			System.out.print(i+" ");
		}
	}
}

11.

package simple;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
 * 請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續   判斷第二個字母。
 * */
public class like {
	public static void main(String args[]) {
		char n;
		Scanner scan=new Scanner(System.in);
		//scan.next
		n=scan.nextLine().charAt(0);
		List<String>list=new ArrayList<String>();
		list.add("Monday");
		list.add("Thuesday");
		list.add("Wedsday");
		list.add("Tuesday");
		list.add("Friday");
		list.add("Saturday");
		list.add("Sunday");
		boolean flag=true;
		String taget=null;
		while(flag) {
			for(String d:list) {
				for(int i=0;i<d.length();i++) {
					if(n!=d.charAt(i)) {
						break;
					}
					else {
						if(i!=d.length()-1) {
						System.out.println("請輸入下一個字符:");
						n=scan.nextLine().charAt(0);
						}
						else {
							flag=false;
							break;
						}
					}
				}
				if(flag==false) {
					taget=d;
					break;
				}
			}
			if(flag==true) {
				System.out.println("沒找到");
				flag=false;
			}
			else {
				System.out.println("找到了"+taget);
			}
		}
	}
}

12.

package simple;
/*
 * 心得:indexOf會返回第一個出現的位置,可以補一個int參數表示從哪裏開始搜索,默認第一個開始。
 * 		lastIndexOf返回最後一個出現位置
 * 		split可以將字符串按照參數字符串分開,但是注意分開後都不會帶參數的字符段
 * */
public class locationOfString {
	public static void main(String args[]) {
		String s="sdzcmxznvbqeyrgasdbafasdav";
		char[]x=s.toCharArray();
		//Character.
		String[]z=s.split("asd");
		for(String y:z) {
			System.out.println(y);
		}
		System.out.println(s.indexOf("asd")+" "+s.lastIndexOf("asd"));
	}
}

13.

package simple;
/*
 * 正向冒泡排序
 * 反向冒泡同理
 * 心得:冒泡就是每次找到一個最大/小值放在最後面,需要遍歷的隊列逐漸縮短
 * */
public class maoPaoSort {
	public static void main(String args[]) {
		int []a= {134,436,1324,647,134,5645,12312};
		int k;
		for(int i=0;i<a.length;i++) {
			for(int j=0;j<a.length-i-1;j++) {
				if(a[j]>a[j+1]) {
					k=a[j];
					a[j]=a[j+1];
					a[j+1]=k;
				}
			}
		}
		for(int x:a) {
			System.out.print(x+" ");
		}
	}
}

14.

package simple;

import java.util.LinkedList;
import java.util.List;
/*
 * 有1、2、3、4四個數字,能組成多少個互不相同且一個數字中無重複數字的三位數?並把他們都輸入。  
 * */
public class oneTwoThreeFour {
	public static void main(String args[]) {
		List<String>list=new LinkedList<String>();
	for(int i=1;i<5;i++) {
		for(int j=1;j<5;j++) {
			for(int k=1;k<5;k++) {
				if(i!=j&&j!=k&&i!=k) {
					list.add(i+""+j+""+k+"");
				}
			}
		}
	}
	for(String n:list) {
		System.out.println(n);
	}
  
}
}

15.

package simple;

import java.util.Stack;
/*
 * 古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,
 * 假如兔子都不死,問12個月的後兔子總數爲多少?
 * */
public class rabbitGetMore {
	public static void main(String agrs[]) {
		Stack grown=new Stack();
		Stack unGrown1=new Stack();
		Stack unGrown2=new Stack();
		grown.push(1);
		unGrown1.push(0);
		unGrown2.push(0);
		int month=12;
		int r1=0,r2=0,r3=1;
		for(int i=0;i<month;i++) {
			r2=(int) unGrown1.pop();
			r1=(int)grown.peek();
			r3=(int)unGrown2.pop()+(int)grown.peek();
			unGrown2.push(r2);
			unGrown1.push(r1);
			//unGrown1.pop();
			grown.push(r3);
		}
		System.out.println("兔總數爲"+grown.peek()+"  "+unGrown1.peek()+"  "+unGrown2.peek());
	}
}

16.

package simple;
/*
 * 利用遞歸方法求5!。
 * */
public class reFun {
	public int refun(int k) {
		if(k==1) {
			return 1;
		}
		else {
			return k*refun(k-1);
		}
	}
	public static void main(String args[]) {
		reFun re=new reFun();
		int result=re.refun(5);
		System.out.println(result);
	}
}

17.

package simple;

import java.util.Scanner;
/*
 * 利用條件運算符的嵌套來完成此題:學習成績> =90分的同學用A表示,
 * 60-89分之間的用B表示,60分以下的用C表示。   
 * 心得:條件運算符:判斷? value1:value2 
 * 條件運算符實際只是返回一個值;因此跟函數一樣可以嵌套;value1和value2也可以再寫成一個條件運算符
 * */
public class setMark {
	public static void main(String args[]) {
		int mark;
		Scanner scan=new Scanner(System.in);
		System.out.println("請輸入成績");
		mark=scan.nextInt();
		char markInChar=mark>=90?'A':mark>=60?'B':'C';
		System.out.println("成績爲"+markInChar);
	}
}

18.

package simple;
/*
 * 打印出如下圖案(菱形)   
   *   
  ***   
 *****   
*******   
 *****   
  ***   
   *   
 //心得:對於像遞增的循環(想要對同一步驟連續執行1,3,5,7次),可以令自增變量i每次增加1/n,n爲遞增的值
 * */
public class triType {
	public static void main(String args[]) {
		for(int i=0;i<4;i++) {
			for(int j=3;j>i;j--) {
				System.out.print(" ");
			}
			for(int k=1;k/2.0<i+1;k++) {
				System.out.print("*");
			}
			System.out.println("");
		}
	}
}

19.

package simple;

import java.util.Scanner;

/*
 * 打印出所有的 "水仙花數 ",所謂 "水仙花數 "是指一個三位數,其各位數字立方和等於該數本身。
 * 例如:153是一個 "水仙花數 ",因爲153=1的三次方+5的三次方+3的三次方。
 * 心得:判斷到運行錯誤時要及時結束當前線程繼續運行,防止下面的代碼段繼續運行出現意料之外到結果
 * */
public class waterFlowerNumber {
	public static void main(String args[]) {
		Scanner scan=new Scanner(System.in);
		String numberInString;
		System.out.println("請輸入任意三位數字");
		numberInString=scan.nextLine();
		if(numberInString.length()!=3) {
			System.out.println("您輸入的不是三位數字");
			return;
		}
		int zero='0';
		int n3,n2,n1;
		n3=numberInString.charAt(0)-zero;
		n2=numberInString.charAt(1)-zero;
		n1=numberInString.charAt(2)-zero;
		if(Integer.valueOf(numberInString)==n3*n3*n3+n2*n2*n2+n1*n1*n1) {
			System.out.println(numberInString+"是一個水仙花數");
		}
		else {
			System.out.println(numberInString+"不是水仙花數");
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章