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;
}
}
}