Java编程题汇总备忘

1.从键盘输入一组数(用,分割),排序后输出

【分析】使用Scanner类获取键盘输入。以下代码都放在main函数中

  System.out.println("请输入一串数字,用,隔开:");
		Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();
		String[] strarr = str.split(",");
		int len = strarr.length;
		int[] num = new int[len];
		for(int i=0;i<len;i++){
			num[i]=Integer.parseInt(strarr[i]);
		}		
		for(int i=0;i<len-1;i++){
			for(int j=i+1;j<len;j++){
				if(num[i]>num[j]){
					int tem  = num[i];
					num[i]=num[j];
					num[j]=tem;
				}
			}
		}
  for(int k : num){
			System.out.print(k+" ");
		}

  方法二:使用ArrayList,纯为了练习

  System.out.println("请输入一串数字,用,隔开:");
		Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();
		ArrayList<Integer> list = new ArrayList<Integer>();
		for(String s : strarr){
			list.add(Integer.parseInt(s));
		}
		int len = list.size();
		for(int i=0;i<len-1;i++){
			for(int j=i+1;j<len;j++){
				if(list.get(i)>list.get(j)){
					int tem = list.get(i);
					list.set(i, list.get(j));
					list.set(j, tem);
				}
			}
		}
		
		for(int k : list){
			System.out.print(k+" ");
		}
 

2. 编程实现:从字符中获取连续数组序列,如字符串"a1dl2iad9j3la5kudp7u9pn4blj8ap5u3e6ml9a"中可以得到的连续数字序列为1234556.【注】:只考虑一位,因此最长的数字序列为:0123456789

 

【方法一】

  String str = "a1dl2iad9j3la5kudp7u9pn4blj8ap5u3e6ml9a";		
		int len = str.length();		
		ArrayList<Integer> array = new ArrayList<Integer>();
		ArrayList<Integer> result = new ArrayList<Integer>();
	
		for(int i = 0;i<len; i++){
			char tem = str.charAt(i);
			if(tem>='0'&&tem<='9'){
				array.add(Integer.parseInt(String.valueOf(tem)));
			}
		}
		int size = array.size();
		int first = array.get(0);
		result.add(first);
		for(int i =1,j=0;i<size;i++){
			
			if(array.get(i)-result.get(j) == 1){
				result.add(array.get(i));
				j++;
			}
		}
		for(int k : result){
			System.out.print(k+" ");
		}

  【方法er】使用正则匹配,纯为练手

  String str = "a1dl2iad9j3la5kudp7u9pn4blj8ap5u3e6ml9a";
//		String[] num = Pattern.compile("[\\D]").split(str,-1); // \d表示数字,\D表示非数字(等价于^0-9)
		String[] num = Pattern.compile("[^0-9]").split(str,-1);
		int k = 0;
		ArrayList<Integer> result = new ArrayList<Integer>();
		for(int i = 0;i<num.length;i++){
			if(num[i]!=null&&!num[i].equals("")){
				result.add(Integer.parseInt(String.valueOf(num[i])));
				k = i;
				break;
			}
		}
		for(int i = k,j=0;i<num.length;i++){
			if(num[i]!=null&&!num[i].equals("")){
				int tem =Integer.parseInt(String.valueOf(num[i]));
				if(tem-result.get(j)==1){
					result.add(tem);
					j++;
				}
			}
			
		}
		for(int n : result){
			System.out.print(n+" ");
		}
 

 

 

 

 

 

 

3.编程实现单链表逆转

 

 

4.用递归方法实现斐波那契数列的前10项之和。

(可参考:http://jerrygao.iteye.com/blog/101283)

 

 

 

5. 500人围成一圈报数,数到3的人出列,下面的人继续从1开始报数,求最后一个出列的人的编号(用数组模拟链表实现)。这实际上是一个约瑟夫出圈问题: n个人围成一个圈,一个个首尾相连的圈报数,从第一个开始报数,报到m的人出圈,剩下的人继续从1开始报数,直到所有人都出圈为止。 两种方法实现,数据和链表。

 

 

 

 

6.

算法程序题:
    该公司笔试题就1个,要求在10分钟内作完。
    题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

 

 

 

 

 


  基本思路:
1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。
2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:
  1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。
  2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果
  3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。

 

 


我采用二维数组定义图结构,最后的代码是:

 

 

 

Java代码   收藏代码
  1. import  java.util.Iterator;  
  2. import  java.util.TreeSet;  
  3. public   class  TestQuestion {  
  4. private  String[] b =  new  String[]{ "1" "2" "2" "3" "4" "5" };  
  5. private   int  n = b.length;  
  6. private   boolean [] visited =  new   boolean [n];  
  7. visited =falsh;  
  8. private   int [][] a =  new   int [n][n];  
  9. private  String result =  "" ;  
  10. private  TreeSet TreeSet =  new  TreeSet();  
  11. public   static   void  main(String[] args) {  
  12. new  TestQuestion().start();  
  13. }  
  14. private   void  start() {  
  15. for  ( int  i =  0 ; i < n; i++) {  
  16. for  ( int  j =  0 ; j < n; j++) {  
  17. if  (i == j) {  
  18. a[i][j] = 0 ;  
  19. else  {  
  20.     a[i][j] = 1 ;  
  21. }  
  22. }  
  23. }a[3 ][ 5 ] =  0 ;  
  24. a[5 ][ 3 ] =  0 ;  
  25. for  ( int  i =  0 ; i < n; i++) {  
  26.     this .depthFirstSearch(i);  
  27. }  
  28. Iterator it = set.iterator();  
  29. while  (it.hasNext()) {  
  30. String string = (String) it.next();  
  31.   
  32. if  (string.indexOf( "4" ) !=  2 ) {  
  33. System.out.println(string);  
  34. }  
  35. }  
  36. }  
  37. private   void  depthFirstSearch( int  startIndex) {  
  38. visited[startIndex] = true ;  
  39. result = result + b[startIndex];  
  40. if  (result.length() == n) {  
  41. TreeSet .add(result);  
  42. }  
  43. for ( int  j =  0 ; j < n; j++) {  
  44. if  (a[startIndex][j] ==  1  && visited[j] ==  false ) {  
  45. depthFirstSearch(j);  
  46. else  {  
  47. continue ;  
  48. }  
  49. }  
  50.     result = result.substring(0 , result.length() - 1 );  
  51.     visited[startIndex] = false ;  
  52. }  
  53. }  
import java.util.Iterator;
import java.util.TreeSet;
public class TestQuestion {
private String[] b = new String[]{"1", "2", "2", "3", "4", "5"};
private int n = b.length;
private boolean[] visited = new boolean[n];
visited =falsh;
private int[][] a = new int[n][n];
private String result = "";
private TreeSet TreeSet = new TreeSet();
public static void main(String[] args) {
new TestQuestion().start();
}
private void start() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
a[i][j] = 0;
} else {
    a[i][j] = 1;
}
}
}a[3][5] = 0;
a[5][3] = 0;
for (int i = 0; i < n; i++) {
    this.depthFirstSearch(i);
}
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();

if (string.indexOf("4") != 2) {
System.out.println(string);
}
}
}
private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];
if (result.length() == n) {
TreeSet .add(result);
}
for(int j = 0; j < n; j++) {
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
} else {
continue;
}
}
    result = result.substring(0, result.length() -1);
    visited[startIndex] = false;
}
}
 

 

 

 

你可能感兴趣的:(java,编程,J#)