HuaWeiJava 上机

 1 /*
 2      * 第二题,输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,
 3      * 然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列。
 4      * 例如:  输入:len=4    str="3,1,2,4"   m=7   
 5      * 输出:2,3,1,4 
 6      */
 7      public static String getOutString(int len, String str, int m) {
 8          String[] ss = str.split(",");
 9          ArrayList<Integer> arrayInt = new ArrayList<Integer>();
10          Stack<Integer> stackInt = new Stack<Integer>();
11          String s = "";
12          
13          for(int i = 0; i < ss.length; i++){
14              arrayInt.add(Integer.parseInt(ss[i]));
15          }
16          
17          while(arrayInt.size() != 0){
18             
19              
20              int n = m % arrayInt.size();//第n个数,在arrayInt 中是第 n - 1 个数
21              if(n == 0) {
22                  n = arrayInt.size();
23              }
24              m = arrayInt.get(n - 1);
25              //arrayInt.remove(n - 1);
26              //arrayInt 中 第n个数开始
27              for(int i = n - 2; i >= 0; i--){
28                  stackInt.push(arrayInt.get(i));
29              }
30              for(int i = arrayInt.size() - 1; i > n -1; i--){
31                  stackInt.push(arrayInt.get(i));
32              }
33              System.out.println(arrayInt.remove(n - 1) +"");
34              for(int i = 0; i < arrayInt.size(); i++){
35                  arrayInt.set(i, stackInt.pop());
36              }
37          }
38          return s;
39      }

 

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

 

 1 package com.huawei.test;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.Stack;
 6 /**
 7  *  第三题,输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
 8  *    例如:  输入:3+8×2/9-2  
 9  *  输出:2  
10  *
11  * @author Administrator
12  *
13  */
14 
15 public class HuaWeiTest {
16 
17     public static void main(String[] args) {
18         
19         System.out.println(getMyRet("3+8/2*2"));
20     }
21 
22     public static int getMyRet(String str) {
23         String expression = str.trim();
24         Stack<Integer> operandStack = new Stack<Integer>();
25         Stack<Character> operatorStack = new Stack<Character>();
26         
27         for(int i = 0; i < expression.length(); i++){
28             char ch = expression.charAt(i);
29             if(ch == '+' || ch == '-' ){//
30                 while(!operatorStack.isEmpty() && (operatorStack.peek() == '+' 
31                         || operatorStack.peek() == '-' 
32                         || operatorStack.peek() == '*' 
33                         || operatorStack.peek() == '/')){
34                     processAnOperator(operandStack, operatorStack);
35                 }
36                 operatorStack.push(ch);
37             }
38             else if (ch == '*' || ch == '/'){
39                 while(!operatorStack.isEmpty() && ( 
40                     operatorStack.peek() == '*' || operatorStack.peek() == '/')){
41                     processAnOperator(operandStack, operatorStack);
42                 }
43                 operatorStack.push(ch);
44             }
45             else{
46                 operandStack.push(ch - '0');
47             }    
48         }
49         while(!operatorStack.isEmpty()){
50             processAnOperator(operandStack, operatorStack);
51         }
52         return operandStack.pop();                                              
53     }
54     public static void processAnOperator(Stack<Integer> operandStack, Stack<Character> operatorStack){
55         char op = operatorStack.pop();
56         int op1 = operandStack.pop();
57         int op2 = operandStack.pop();
58         switch (op) {
59         case '+':
60             operandStack.push(op1 + op2);
61             break;
62         case '-':
63             operandStack.push(op2 - op1);
64             break;
65         case '*':
66             operandStack.push(op1 * op2);
67             break;
68         case '/':
69             operandStack.push(op2 / op1);
70             break;
71         default:
72             break;
73         }
74     }
75 }

 

posted @ 2014-03-06 21:26  soul390  阅读(183)  评论(0编辑  收藏  举报