`
taimukang
  • 浏览: 184000 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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面试题以及技巧

    │ │ │ java编程思想中文303.pdf │ │ │ java编程思想中文304.pdf │ │ │ java编程思想中文305.pdf │ │ │ java编程思想中文306.pdf │ │ │ java编程思想中文307.pdf │ │ │ java编程思想中文308.pdf │...

    Java高级面试题及答案真题(2021年Java面试题答案大汇总)

    该套面试题汇总大全,包含大量经典的Java面试题以及答案,希望对大家有帮助。 1. Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。在并发...

    509道Java面试题汇总与解析.zip

    "509道Java面试题汇总与解析"这个压缩包文件显然是为准备Java程序员面试的人精心编排的资源集合。它可能包含了大量的Java基础知识、进阶概念、设计模式、框架以及实际开发中的问题解答。 首先,Java的基础知识是...

    java面试题及技巧4

    │ │ │ java编程思想中文303.pdf │ │ │ java编程思想中文304.pdf │ │ │ java编程思想中文305.pdf │ │ │ java编程思想中文306.pdf │ │ │ java编程思想中文307.pdf │ │ │ java编程思想中文308.pdf │...

    java面试题大汇总

    这里我们将深入探讨Java编程语言中的核心概念、高级特性以及常见问题。 1. **Java基础** - 类与对象:Java是一种面向对象的语言,理解类的定义、构造器、封装、继承和多态性至关重要。 - 内存管理:了解Java内存...

    java面试题及技巧3

    │ │ │ java编程思想中文303.pdf │ │ │ java编程思想中文304.pdf │ │ │ java编程思想中文305.pdf │ │ │ java编程思想中文306.pdf │ │ │ java编程思想中文307.pdf │ │ │ java编程思想中文308.pdf │...

    java面试题精华汇总

    Java面试题精华汇总 在Java领域,面试是一个关键环节,用来评估候选人的技术实力和问题解决能力。以下是一些常见的Java面试知识点,涵盖了基础、进阶到高级的各个方面。 1. **Java基础知识** - 类与对象:了解类...

    java面试题以及技巧6

    │ │ │ java编程思想中文303.pdf │ │ │ java编程思想中文304.pdf │ │ │ java编程思想中文305.pdf │ │ │ java编程思想中文306.pdf │ │ │ java编程思想中文307.pdf │ │ │ java编程思想中文308.pdf │...

    java面试题目与技巧1

    │ │ │ java编程思想中文303.pdf │ │ │ java编程思想中文304.pdf │ │ │ java编程思想中文305.pdf │ │ │ java编程思想中文306.pdf │ │ │ java编程思想中文307.pdf │ │ │ java编程思想中文308.pdf │...

    2018校招12家企业笔试真题汇总 十分全面

    通过对这些真题的学习和理解,可以深入掌握Java编程的基础知识、进阶技能以及面试常见问题,提升自己的竞争力。 一、Java基础 在准备这类笔试时,首先需要扎实的Java基础知识,包括但不限于: 1. Java语法:变量、...

    125条常见的java面试笔试题大汇总

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而备受开发者青睐。在面试和笔试中,Java题目通常会涵盖基础语法、数据结构与算法、多线程、异常处理、集合框架、IO流、网络编程等多个方面...

    面试题汇总

    这份"面试题汇总"包含了丰富的知识内容,旨在帮助求职者更好地准备面试,提高成功几率。以下是一些关键的Java面试知识点: 1. **Java基础**: - 类与对象:理解面向对象编程的基本概念,如封装、继承、多态。 - ...

    Java 66 道面试题及答案.docx

    Java设计模式是面向对象编程中的一种最佳实践,它是一系列被广泛接受并应用于解决常见问题的解决方案。设计模式是经过无数开发者验证过的成熟代码设计经验的汇总,它们旨在提高代码的可重用性、可读性和可靠性。学习...

Global site tag (gtag.js) - Google Analytics