第一題:輸入字符串長度len1,字符串s1,字符串長度len2,字符串s2。從後向前比較,以最短字符串爲標準,輸出不一樣的元素的個數。java
例如: 輸入:s1="1,3,5" len1=3 s2="2,4,1,7,5" len2=5 git
輸出:1數組
函數原型數據結構
public int getDiffNum(int len1, String s1, int len2, String s2) app
[java] :函數
public class HuaWeiTest {post
public static void main(String[] args) {ui
String s1 = "1,3,5";this
String s2 = "2,4,1,7,5";spa
int len1 = 3;
int len2 = 5;
HuaWeiTest hwt = new HuaWeiTest();
System.out.println(hwt.getDiffNum(len1, s1, len2, s2));
}
public int getDiffNum(int len1, String s1, int len2, String s2) {
int count = 0;
int len = 0;
String[] arr1 = s1.split(",");
String[] arr2 = s2.split(",");
if(len1 > len2) len = len2;
else len = len1;
for(int i=0;i<len;i++) {
if(!arr1[len1-i-1].equals(arr2[len2-i-1])) {
count ++;
}
}
return count;
}
}
第二題:輸入字符串長度,字符串,計數m。從前日後計數,當數到m個元素時,m個元素出列,同時將該元素賦值給m,而後從下一個數計數循環,直到全部數字都出列,給定的數所有爲大於0的數字。輸出出隊隊列。
例如: 輸入:len=4 str="3,1,2,4" m=7
輸出:2,3,1,4
函數原型
public String getOutString(int len, String str, int m)
[java] :
import java.util.ArrayList;
import java.util.List;
public class HuaWeiTest {
public static void main(String[] args) {
int len=4;
String str="3,1,2,4";
int m=7;
HuaWeiTest hwt = new HuaWeiTest();
System.out.println(hwt.getOutString(len, str, m));
}
public String getOutString(int len, String str, int m) {
String ret ="";
String[] arr = str.split(",");
List<String> ls = new ArrayList<String>();
for(int i=0;i<len;i++) {
ls.add(arr[i]);
}
for(int i=0;i<len;i++) {
int temp = (m-1)%ls.size();
ret += ls.get(temp);
m = Integer.parseInt(ls.get(temp))+temp;
ls.remove(temp);
}
return ret;
}
}
一.選秀節目打分,分爲專家評委和大衆評委,score[] 數組裏面存儲每一個評委打的分數,judge_type[] 裏存儲與 score[] 數組對應的評委類別,judge_type[i] == 1,表示專家 評委,judge_type[i] == 2,表示大衆評委,n表示評委總數。打分規則以下:專家評委和大衆評委的分數先分別取一個平均分(平均分取整),而後,總分 = 專家評委平均分 * 0.6 + 大衆評委 * 0.4,總分取整。若是沒有大衆評委,則 總分 = 專家評委平均分,總分取整。函數最終返回選手得分。
函數接口 int cal_score(int score[], int judge_type[], int n)
[java] :
public class SWTest {
public static void main(String[] args) {
int score[] = {
34,53,65,75,64
};
int judge_type[] = {
1,1,1,2,2
};
SWTest st = new SWTest();
System.out.print(st.cal_score(score, judge_type, 5));
}
int cal_score(int score[], int judge_type[], int n){
int totalExpert = 0;
int totalPublic = 0;
int numExpert = 0;
int numPublic = 0;
for(int i=0;i<n;i++) {
if(judge_type[i]==1) {
totalExpert += score[i];
numExpert ++;
}
if(judge_type[i] == 2){
totalPublic += score[i];
numPublic ++;
}
}
if(0==numPublic){
return (int)totalExpert/numExpert;
}else
{
return (int)((totalExpert/numExpert)*0.6) +
(int)((totalPublic/numPublic)*0.4);
}
}
}
二.給定一個數組input[] ,若是數組長度n爲奇數,則將數組中最大的元素放到 output[] 數組最中間的位置,若是數組長度n爲偶數,則將數組中最大的元素放到 output[] 數組中間兩個位置偏右的那個位置上,而後再按從大到小的順序,依次在第一個位置的兩邊,按照一左一右的順序,依次存放剩下的數。 例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}
函數接口 void sort(int input[[, int n, int output[])
[java] :
public class SWTest {
public static void main(String[] args) {
int input[] = {3,6,1,9,7,8};
int output[] = new int[6];
SWTest st = new SWTest();
st.sort(input, 6, output);
for(int i=0;i<output.length;i++){
System.out.print(output[i]);
}
}
void sort(int input[], int n, int output[]){
for(int i=0;i<n-1;i++){
for(int j=n-1;j>i;j--){
if(input[j]>input[j-1]) {
int temp = input[j];
input[j] = input[j-1];
input[j-1] = temp;
}
}
}
int low = n/2-1;
int high = n/2+1;
output[n/2] = input[0];
for(int i=1;i<n;){
output[low] = input[i];
low --;
i++;
if(i == n) break;
output[high] = input[i];
high++;
i++;
}
}
}
三.操做系統任務調度問題。操做系統任務分爲系統任務和用戶任務兩種。其中,系統任務的優先級 < 50,用戶任務的優先級 >= 50且 <= 255。優先級大於255的爲非法任務,應予以剔除。現有一任務隊列task[],長度爲n,task中的元素值表示任務的優先級,數值越小,優先級越高。函數scheduler實現以下功能,將task[] 中的任務按照系統任務、用戶任務依次存放到 system_task[] 數組和 user_task[] 數組中(數組中元素的值是任務在task[] 數組中的下標),而且優先級高的任務排在前面,優先級相同的任務按照入 隊順序排列(即先入隊的任務排在前面),數組元素爲-1表示結束。 例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}
函數接口 void scheduler(int task[], int n, int system_task[], int user_task[])
[java] :
void scheduler(int task[], int n, int system_task[], int user_task[]){
int min = 0 ,s =0, u =0 ;
for(int i=0;i<n-1;i++) {
min = 0;
for(int j=0;j<n;j++) {
if(task[min]>task[j]) min = j;
}
if(task[min]<50) {
system_task[s++] = min;
}else if(task[min]<=255) {
user_task[u++] = min;
}
task[min] = 300;
}
system_task[s]= -1;
user_task[u] = -1;
}
四.問題描述: 我國大陸運營商的手機號碼標準格式爲:國家碼+手機號碼,例如:8613912345678。特色以下: 1、 長度13位; 2、 以86的國家碼打頭; 3、 手機號碼的每一位都是數字。 請實現手機號碼合法性判斷的函數(注:考生無需關注手機號碼的真實性,也就是說諸如86123123456789這樣的手機號碼,咱們也認爲是合法的),要求: 1) 若是手機號碼合法,返回0; 2) 若是手機號碼長度不合法,返回1 3) 若是手機號碼中包含非數字的字符,返回2; 4) 若是手機號碼不是以86打頭的,返回3; 【注】除成功的狀況外,以上其餘合法性判斷的優先級依次下降。也就是說,若是判斷出長度不合法,直接返回1便可,不須要再作其餘合法性判斷。 要求實現函數: int s int verifyMsisdn(char* inMsisdn) 【輸入】 char* inMsisdn,表示輸入的手機號碼字符串。 【輸出】 無 【返回】 判斷的結果,類型爲int。 示例 輸入: inMsisdn = 「869123456789「 輸出: 無 返回: 1 輸入: inMsisdn = 「8813912345678「 輸出: 無 返回: 3 輸入: inMsisdn = 「8613912345678「 輸出: 無 返回: 0
[java] :
試題一:輸入字符串長度len1,字符串s1,字符串長度len2,字符串s2。從後向前比較,以最短字符串爲標準,輸出不一樣的元素的個數。
例如: 輸入:s1="1,3,5" len1=3 s2="2,4,1,7,5" len2=5
輸出:1
public class Test1 { public static void main(String[] args) { String str1 = "1,3,5"; String str2 = "2,1,6,5"; System.out.println(getDifferentNumber(str1, 3, str2, 4)); } public static int getDifferentNumber(String str1, int len1, String str2, int len2) { int count = 0; int len = 0; len = (len1<len2)? len1:len2; String s1[] = str1.split(","); String s2[] = str2.split(","); for(int i=0;i<len;++i) { if(!(s2[len2-i-1].equals(s1[len1-i-1]))) { count++; } } return count; } } |
試題二:約瑟夫環問題。輸入字符串長度,字符串,計數m。從前日後計數,當數到m個元素時,m個元素出列,而後將出列的數字賦值給m。而後從下一個數計數循環,直到全部數字都出列,給定的數所有爲大於0的數字。輸出出隊隊列。
public class Josephus_Seq { public static void main(String[] args) { Josephus jo = new Josephus(new int[]{3,1,6,2,5}); jo.ShowInfo(); System.out.println(); jo.doJosephus(3); } } class Node { public int num; public Node next; public Node(int i) { this.num = i; this.next = null; } } class Josephus { public Node head;
public Josephus(int[] data) { Node p = new Node(data[0]); head = p; for(int i=1;i<data.length;++i) { p.next = new Node(data[i]); p = p.next; } p.next = head; } public void doJosephus(int s) { Node p,q = null; int step = s; p = head; while(p.next != p) { for(int i=1;i<step;i++) { q = p; p = p.next; } step = p.num; System.out.println(p.num); q.next = p.next; p = p.next; } } } |
試題三:手機號碼判斷問題
public class PhoneNumberTest { public static void main(String[] args) { PhoneNumberTest pt = new PhoneNumberTest(); int res = pt.verifyMsisdn("8662923042663"); System.out.println(res); } public int verifyMsisdn(String num) { int res = 0; char[] ch = num.toCharArray(); if(ch.length<13) return 1; for(int i=0;i<ch.length;++i) { if(!('0'<=ch[i]&&ch[i]<='9')) return 2; } if(!((ch[0]=='8')&&(ch[1]=='6'))) return 3; return res; } } |
試題四:使用數組和鏈表實現數據結構-棧。
//數組實現 public class MyStack { private Object[] obj = new Object[16]; private int size = 0; public boolean isEmpty() { return size==0; } public void clear() { for(int i=0;i<size;i++) { obj[i] = null; } size = 0; } public int lentgh() { return size; } private void resize() { Object[] temp = new Object[obj.length*3/2+1]; for(int i=0;i<size;i++) { temp[i] = obj[i]; obj[i] = null; } obj = temp; } public boolean push(Object data) { if(size>=obj.length) { resize(); } obj[size++] = data; return true; } public Object pop() { if(size == 0) { return null; } return obj[--size]; } } 實例應用1:將10進制的正整數轉換爲n進制 public String conversion(int num,int n) { MyStack ms = new MyStack(); Integer res = num; while(true) { ms.push(res%n); res = res/n; if(res == 0) { break; } } StringBuffer sb =new StringBuffer(); while((res=(Integer) ms.pop())!=null) { sb.append(res); } return sb.toString(); } 實例應用2:判斷括號的匹配 public boolean isMatch(String str) { MyStack<Character> myStack = new MyArrayStack<Character>(); char[] arr = str.toCharArray(); for (char c : arr) { Character temp = myStack.pop(); // 棧爲空時只將c入棧 if (temp == null) { myStack.push(c); } // 配對時c不入棧 else if (temp == '[' && c == ']') { } // 配對時c不入棧 else if (temp == '(' && c == ')') { } // 不配對時c入棧 else { myStack.push(temp); myStack.push(c); } } return myStack.isEmpty(); } |
//鏈表實現 public class MyLinkedStack { private LinkedNode top; private int size; public MyLinkedStack() { top = null; size = 0; } public boolean isEmpty() { return size == 0; } public void clear() { top = null; size = 0; } public int length() { return size; } public boolean push(Object o) { LinkedNode ln = new LinkedNode(); ln.data = o; ln.pre = top; top = ln; size++; return true; } public Object pop() { if(top != null) { LinkedNode ln = top; top = top.pre; size--; return ln.data; } return null; } } class LinkedNode { public Object data; public LinkedNode pre; } |
試題五:簡單四則運算
public class Operate { public static void main(String[] args) { String exp = "1+3*4+6/2"; System.out.println(calculate(exp)); } public static int calculate(String exp) { char[] exps = exp.toCharArray(); int[] num = new int[20]; int[] str = new int[20]; int k2; int k1 = k2 = 0; for(int i=0;i<exps.length;i++) { if(exps[i]>='0'&&exps[i]<='9') { num[k1++] = exps[i]-'0'; } if(exps[i]=='-'||exps[i]=='+') { str[k2++] = exps[i]; } if(exps[i]=='*') { num[k1-1] = num[k1-1]*(exps[i+1]-'0'); i++; } if(exps[i]=='/') { num[k1-1] = num[k1-1]/(exps[i+1]-'0'); i++; } } for(int i=0;i<num.length;i++) { System.out.print(num[i]); } System.out.println(); for(int i=0;i<str.length;i++) { System.out.print(str[i]); } System.out.println(); int temp = num[0]; int j = 0; while(j<k2) { if(str[j]=='-') temp = temp - num[j+1]; else if(str[j]=='+') temp = temp + num[j+1]; j++; } return temp; } } |
試題六:判斷迴文字符
public class HuiwenArrayTest { public static void main(String[] args) { int[] a = new int[]{1,2,2,1}; System.out.println(HuiwenArrayTest.judge(a)); } public static boolean judge(int[] array) { for(int i=0;i<array.length/2;i++) { if(array[i] == array[array.length-1-i]) { continue; } else return false; } return true; } } |
試題七:求兩個數組的異集(A和B的交集)
public static void start(Integer[] a, Integer[] b) { List<Integer> list = new ArrayList<Integer>(); for(int i=0;i<a.length;++i) { for(int j=0;j<b.length;++j) { if(b[j] == a[i]) { list.add(a[i]); break; } } } System.out.println(list); } } |
試題八:逆序鏈表
非遞歸實現: public void reverse() { MyTestNode pre = null,post = null; MyTestNode p = head; while(p.next!=null) { post = p.next; if(post == null) { head = post; } p.next = pre; pre = p; p = post; } p.next = pre; head = p; } |
試題九:一副牌中發五張撲克牌給你:讓你判斷數字的組成:有如下幾種狀況: 1:四條:即四張同樣數值的牌(牌均不論花色) 2:三條帶一對 3:三條帶兩張不相同數值的牌 4:兩對 5:順子 包括 10,J,Q,K,A 6:什麼都不是 7:只有一對
public class Puke { public static void main(String[] args) { int[] a = new int[]{1,2,3,4,5}; start(a); } public static void start(int a[]) { for(int i=0;i<a.length;i++) { for(int j=i+1;j<a.length;j++) { int tmp = 0; if(a[i]>a[j]) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } int k = 0; for(int i=0;i<4;i++) { if(a[i]==a[i+1]) k++; } if(k==3) { if(a[0]==a[3]) System.out.println("四條"); else System.out.println("三條帶一對"); } if(k==2) { if(a[1]!=a[2]||a[2]!=a[3]) System.out.println("三條帶兩個不一樣的"); else System.out.println("兩對"); } if(k==1) System.out.println("一對"); if(k==0){ if(a[4]-a[0]==4&&a[4]-a[1]==3&&a[4]-a[2]==2&&a[4]-a[3]==1) System.out.println("順子"); else System.out.println("什麼都不是"); } } } |
試題十:選秀節目打分,分爲專家評委和大衆評委,score[] 數組裏面存儲每一個評委打的分數,judge_type[] 裏存儲與 score[] 數組對應的評委類別,judge_type == 1,表示專家評委,judge_type == 2,表示大衆評委,n表示評委總數。打分規則以下:專家評委和大衆評委的分數先分別取一個平均分(平均分取整),而後,總分 = 專家評委平均分 * 0.6 + 大衆評委 * 0.4,總分取整。若是沒有大衆評委,則 總分 = 專家評委平均分,總分取整。函數最終返回選手得分。
public class Mark { public static void main(String[] args) { int[] a = new int[]{20,10,40,50}; int[] b = new int[]{1,2,1,2}; System.out.println(new Mark().doMark(a, b)); } public int doMark(int[] score,int[] s) { int result = 0; int dazhong = 0; int zhuanye = 0; int total = 0; for(int i=0;i<s.length;i++) { total+=s[i]; } if(total==score.length) { for(int i=0;i<score.length;i++) { zhuanye+=score[i]; } result = zhuanye/score.length; } else { int tmpa=0; int tmpb=0; for(int i=0;i<score.length;i++) { if(s[i]==1) { dazhong+=score[i]; tmpa++; } else if(s[i]==2) { zhuanye+=score[i]; tmpb++; } } System.out.println(dazhong); System.out.println(zhuanye); result = (int) (dazhong/tmpa*0.4 + zhuanye/tmpb*0.6); } return result; } } |
試題十一:給定一個數組input[] ,若是數組長度n爲奇數,則將數組中最大的元素放到 output[] 數組最中間的位置,若是數組長度n爲偶數,則將數組中最大的元素放到 output[] 數組中間兩個位置偏右的那個位置上,而後再按從大到小的順序,依次在第一個位置的兩邊,按照一左一右的順序,依次存放剩下的數。
public class ArrayTest { public static void main(String[] args) { int[] input = new int[]{3,6,1,9,7,8}; int[] output = new int[]{0,0,0,0,0,0}; arrange(input, output); } public static void arrange(int[] input,int[] output) { //首先冒泡排序 for(int i=0;i<input.length;++i) { for(int j=i+1;j<input.length;++j) { int tmp = 0; if(input[i]<input[j]) { tmp = input[i]; input[i] = input[j]; input[j] = tmp; } } } //根據題目要求進行分配 output[output.length/2] = input[0]; int left = 0; int right = 0; for(int i=1;i<output.length;i++) { if(!(i%2 == 0)) { left++; System.out.println(output.length/2-left+":"+input[i]); output[output.length/2-left] = input[i]; } else if(i%2 == 0) { right++; System.out.println(output.length/2-left+":"+input[i]); output[output.length/2+right] = input[i]; } } for(int i=0;i<output.length;++i) { System.out.print(output[i]); } } } |
試題十二:操做系統任務調度問題。操做系統任務分爲系統任務和用戶任務兩種。其中,系統任務的優先級 < 50,用戶任務的優先級 >= 50且 <= 255。優先級大於255的爲非法任務,應予以剔除。現有一任務隊列task[],長度爲n,task中的元素值表示任務的優先級,數值越小,優先級越高。函數scheduler實現以下功能,將task[] 中的任務按照系統任務、用戶任務依次存放到 system_task[] 數組和 user_task[] 數組中(數組中元素的值是任務在task[] 數組中的下標),而且優先級高的任務排在前面,數組元素爲-1表示結束。
public class Task {
public static void main(String[] args) { int[] task = new int[]{24,56,12,78,23,6,234}; doTask(task); } public static void doTask(int[] task) { int[] tempTask = new int[task.length]; for(int i=0;i<task.length;i++) { tempTask[i] = task[i]; } for(int i=0;i<tempTask.length;i++) { System.out.print(" "+tempTask[i]); } for(int i=0;i<task.length;i++) { int tmp = 0; for(int j=i+1;j<task.length;j++) { if(task[i]<task[j]) { tmp = task[i]; task[i] = task[j]; task[j] = tmp; } } } System.out.println(); for(int i=0;i<task.length;i++) { System.out.print(" "+task[i]); } //查找 int[] index = new int[task.length]; for(int i=0;i<task.length;i++) { for(int j=0;j<tempTask.length;j++) { if(task[i] == tempTask[j]) index[i] = j; } } System.out.println(); //執行分發 List<Integer> sys_List = new ArrayList<Integer>(); List<Integer> usr_List = new ArrayList<Integer>(); for(int i=0;i<task.length;i++) { if(50>task[i]) sys_List.add(index[i]); else if(task[i]>=50&&task[i]<=255) usr_List.add(index[i]); } sys_List.add(-1); usr_List.add(-1); System.out.println(sys_List); System.out.println(usr_List); } } |
試題十三:將一個字符串的元音字母複製到另外一個字符串,並排序(30分)
問題描述:有一字符串,裏面可能包含英文字母(大寫、小寫)、數字、特殊字符,如今須要實現一函數,將此字符串中的元音字母挑選出來,存入另外一個字符串中,並對字符串中的字母進行從小到大的排序(小寫的元音字母在前,大寫的元音字母在後,依次有序)。
說明:1、 元音字母是a,e,i,o,u,A,E,I,O,U。 2、 篩選出來的元音字母,不須要剔重;
最終輸出的字符串,小寫元音字母排在前面,大寫元音字母排在後面,依次有序。
public class StrTest { public static void main(String[] args) { System.out.println(doSomething("adskjflssiAUIOWESLJFIOowfilk")); } public static String doSomething(String str) { StringBuffer sb = new StringBuffer();
char[] ch = str.toCharArray(); for(int i=0;i<ch.length;++i) { if(ch[i]=='a'||ch[i]=='e'||ch[i]=='i'||ch[i]=='o'||ch[i]=='u' ||ch[i]=='A'||ch[i]=='E'||ch[i]=='I'||ch[i]=='O'||ch[i]=='U') { sb.append(ch[i]); } } char[] tmpch = sb.toString().toCharArray(); StringBuffer small = new StringBuffer(); StringBuffer big = new StringBuffer(); for(int i=0;i<tmpch.length;++i) { if(tmpch[i]>='a'&&tmpch[i]<='u') { small.append(tmpch[i]); } else big.append(tmpch[i]); } char[] chsmal = small.toString().toCharArray(); char[] chbig = big.toString().toCharArray(); for(int i=0;i<chsmal.length;i++) { char tmp = ' '; for(int j=i+1;j<chsmal.length;j++) { if(chsmal[j]<chsmal[i]) { tmp = chsmal[j]; chsmal[j] = chsmal[i]; chsmal[i] = tmp; } }
} for(int i=0;i<chbig.length;i++) { char tmp = ' '; for(int j=i+1;j<chbig.length;j++) { if(chbig[j]<chbig[i]) { tmp = chbig[j]; chbig[j] = chbig[i]; chbig[i] = tmp; } } } //Arrays.sort(chsmal); char[] total = new char[sb.length()]; for(int i=0;i<chsmal.length;i++) { total[i] = chsmal[i]; } for(int i=0;i<chbig.length;i++) { total[chsmal.length+i] = chbig[i]; } return String.valueOf(total); } } |