笔试面试之java程序(一)

1.给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


public class TestPrime {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int n = 20;
		
		List<Integer>  list = new ArrayList<Integer>();
		
		for (int i = 6; i < n; i++) {
			if (true == isPrime(i)) {
				System.out.println(i +""+ isPrime(i));
				list.add(i);
			}
		}
		
		Set<Integer> result = new HashSet<Integer>();
		for (int i = 0; i < list.size(); i++) {
			for (int j = i + 1; j < list.size(); j++) {
				result.add(list.get(i)+list.get(j));
			}
		}

		for (int val:result) {
			System.out.println(val);
		}
		
	}	
	public static boolean isPrime(int num){
		
		for (int i = 2; i <= Math.sqrt(num); i++) {
			if (num%i == 0) {
				return false;
			}
		}
		
		return true;
	}

}

2.9月5日,华为2014校园招聘的机试题目
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并
输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
输入pInputStr: 输入字符串lInputLen: 输入字符串长度
输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”

public class Compress {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String output = compress("aooongziiii");
		System.out.println(output);
	}
	public static String compress(String priStr)
	{
		
		char[] str = priStr.toCharArray();
		
		char first = 0;
		char next;
		int num = 1;
		
		StringBuilder stringBuilder = new StringBuilder();
		
		
		for (int i = 0; i < str.length-1; i++) {
			first = str[i];
			next = str[i+1];
			
			if (first == next) {
				num++;
				continue;
			}
			if (num == 1) {
				stringBuilder.append(first);
			}
			else {
				stringBuilder.append(num).append(first);
				num = 1;
			}
		}
		
		if (num == 1) {
			stringBuilder.append(first);
		}
		else {
			stringBuilder.append(num).append(first);
		}

			
			return stringBuilder.toString();
	}

}


3.假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除。(节点替换法)

public class DeleteNode {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Link linkList = new Link();
		linkList.insert(15);
		linkList.insert(18);
		linkList.insert(20);
		linkList.insert(31);
		linkList.insert(56);
		
		linkList.print();
		
		Node1 current = linkList.find(20);
		
		System.out.println("after delete");
		current.data = current.next.data;
		current.next = current.next.next;
		linkList.print();
		
		

	}
}

class Node1{
	int data;
	Node1 next;
	public Node1(int data) {
		super();
		this.data = data;
	}
}
	
	class Link{
		
		
		
		private Node1 head = null;
		
		public void insert(int data) {
			
			Node1 newNode = new Node1(data);
			newNode.next = head;
			head = newNode;
		}
		
		public Node1 find(int i) {
			// TODO Auto-generated method stub
			Node1 current = head;
			if(current == null)
			{
				return null;
			}
			while (current != null) {
				if (current.data == i) {
					return current;
				}
				else {
					current = current.next;
				}
			}
			return null;			
		}

		public void print()
		{
			
			Node1 current = head;
			while (current != null) {
				System.out.println(current.data);
				current = current.next;
			}
		}
		
	}


4.一个m*n的矩阵,从左到右从上到下都是递增的,给一个数elem,求是否在矩阵中,给出思路和代码(杨氏矩阵查找)

public class Young {

	/**
	 * 右上角开始
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 int matrix[][] = {
	                {1,2,8,9},
	                {2,4,9,12},
	                {4,7,10,13},
	                {6,8,11,15}
	        };
		 for (int i = 0; i < 16; i++) {
			 if (young(matrix, 4, 4, i)) {
				System.out.println(i + "yes");
			}
			 else {
				System.out.println(i + "no");
			}
		}
		 
	}
	
	public static boolean young(int matrix[][],int row,int column,int target)
	{
		if (row <= 0 || column <= 0) {
			return false;
		}
		int i = 0;
		int j = column -1;
		int var = matrix[i][j];
		
		while (true) {
			if (var == target) {
				return true;
			}
			else if (var < target && i < row - 1) {
				var = matrix[++i][j];
			}
			else if (var > target && j > 0) {
				var = matrix[i][--j];
			}
			else 
				return false;
		}
		
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值