java編程題

第一題輸入字符串長度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] :函數

  1. public class HuaWeiTest {  
  2. public static void main(String[] args) {  
  3. String s1 = "1,3,5";  
  4. String s2 = "2,4,1,7,5";  
  5. int len1 = 3;  
  6. int len2 = 5;  
  7. HuaWeiTest hwt = new HuaWeiTest();  
  8. System.out.println(hwt.getDiffNum(len1, s1, len2, s2));  
  9. }  
  10. public int getDiffNum(int len1, String s1, int len2, String s2)  {  
  11. int count = 0;  
  12. int len = 0;  
  13. String[] arr1 = s1.split(",");  
  14. String[] arr2 = s2.split(",");  
  15. if(len1 > len2) len = len2;  
  16. else len = len1;  
  17. for(int i=0;i<len;i++) {  
  18. if(!arr1[len1-i-1].equals(arr2[len2-i-1])) {  
  19. count ++;  
  20. }  
  21. }  
  22. return count;  
  23. }  
  24. }  

 

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] :

  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. public class HuaWeiTest {  
  4. public static void main(String[] args) {  
  5. int len=4;  
  6. String str="3,1,2,4";     
  7. int m=7;    
  8. HuaWeiTest hwt = new HuaWeiTest();  
  9. System.out.println(hwt.getOutString(len, str, m));  
  10. }  
  11. public String getOutString(int len, String str, int m) {  
  12. String ret ="";  
  13. String[] arr = str.split(",");  
  14. List<String> ls = new ArrayList<String>();  
  15. for(int i=0;i<len;i++) {  
  16. ls.add(arr[i]);  
  17. }  
  18. for(int i=0;i<len;i++) {  
  19. int temp = (m-1)%ls.size();  
  20. ret += ls.get(temp);  
  21. m = Integer.parseInt(ls.get(temp))+temp;  
  22. ls.remove(temp);  
  23. }  
  24. return ret;  
  25. }  
  26. }  

 

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] :

  1. public class SWTest {  
  2. public static void main(String[] args) {  
  3. int score[] = {  
  4. 34,53,65,75,64  
  5. };  
  6. int judge_type[] = {  
  7. 1,1,1,2,2  
  8. };  
  9. SWTest st = new SWTest();  
  10. System.out.print(st.cal_score(score, judge_type, 5));  
  11. }  
  12. int cal_score(int score[], int judge_type[], int n){  
  13. int totalExpert = 0;  
  14. int totalPublic = 0;  
  15. int numExpert = 0;  
  16. int numPublic = 0;  
  17. for(int i=0;i<n;i++) {  
  18. if(judge_type[i]==1) {  
  19. totalExpert += score[i];  
  20. numExpert ++;  
  21. }  
  22. if(judge_type[i] == 2){  
  23. totalPublic += score[i];  
  24. numPublic ++;  
  25. }  
  26. }  
  27. if(0==numPublic){  
  28. return (int)totalExpert/numExpert;  
  29. }else  
  30. {  
  31. return (int)((totalExpert/numExpert)*0.6) +   
  32. (int)((totalPublic/numPublic)*0.4);  
  33. }  
  34. }  
  35. }  

 

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] :

  1. public class SWTest {  
  2. public static void main(String[] args) {  
  3. int input[] = {3,6,1,9,7,8};  
  4. int output[] = new int[6];  
  5. SWTest st = new SWTest();  
  6. st.sort(input, 6, output);  
  7. for(int i=0;i<output.length;i++){  
  8. System.out.print(output[i]);  
  9. }  
  10. }  
  11. void sort(int input[], int n, int output[]){  
  12. for(int i=0;i<n-1;i++){  
  13. for(int j=n-1;j>i;j--){  
  14. if(input[j]>input[j-1]) {  
  15. int temp = input[j];  
  16. input[j] = input[j-1];  
  17. input[j-1] = temp;  
  18. }  
  19. }  
  20. }  
  21. int low = n/2-1;  
  22. int high = n/2+1;  
  23. output[n/2] = input[0];  
  24. for(int i=1;i<n;){  
  25. output[low] = input[i];  
  26. low --;  
  27. i++;  
  28. if(i == n) break;  
  29. output[high] = input[i];  
  30. high++;  
  31. i++;  
  32. }  
  33. }  
  34. }  

 

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[],長度爲ntask中的元素值表示任務的優先級,數值越小,優先級越高。函數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] :

  1. void scheduler(int task[], int n, int system_task[], int user_task[]){  
  2. int min = 0 ,s =0, u =0 ;  
  3. for(int i=0;i<n-1;i++) {  
  4. min = 0;  
  5. for(int j=0;j<n;j++) {  
  6. if(task[min]>task[j]) min = j;  
  7. }  
  8. if(task[min]<50) {  
  9. system_task[s++] = min;  
  10. }else if(task[min]<=255) {  
  11. user_task[u++] = min;  
  12. }  
  13. task[min] = 300;  
  14. }  
  15. system_task[s]= -1;  
  16. user_task[u] = -1;  
  17. }  

 

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] :

  1. public class PhoneNumber {  
  2. public static void main(String[] args) {  
  3. String  inMsisdn = "8613912345678";  
  4. System.out.println(new PhoneNumber().verifyMsisdn(inMsisdn));  
  5. }  
  6. int verifyMsisdn(String inMsisdn){  
  7. char[] inchars = inMsisdn.toCharArray();  
  8. if(inchars.length!=13) return 1;  
  9. for(int i=0;i<13;i++) {  
  10. if(!Character.isDigit(inchars[i])){  
  11. return 2;  
  12. }  
  13. }  
  14. if((Character.digit(inchars[0], 10)!=8 )||(Character.digit(inchars[1], 10)!=6) ) return 3;  
  15. else return 0;  
  16. }  
  17. }  

 

試題一:輸入字符串長度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;

}

}

試題七:求兩個數組的異集(AB的交集)

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:順子  包括 10JQKA 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[],長度爲ntask中的元素值表示任務的優先級,數值越小,優先級越高。函數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,U2、 篩選出來的元音字母,不須要剔重;

最終輸出的字符串,小寫元音字母排在前面,大寫元音字母排在後面,依次有序。

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

}

}

相關文章
相關標籤/搜索