北理工计算机复试上机 2010

Posted 宇宙由我代码生成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了北理工计算机复试上机 2010相关的知识,希望对你有一定的参考价值。

1.输入一串整数,输入命令!
要求
    1.输入a t在这串整数后添加整数t.
    2.输入c \m \n用n替换m.
    3.输入d t删除t
    4.输入s 排序

 1 /**
 2 1.输入一串整数,输入命令!
 3 要求
 4     1.输入a t在这串整数后添加整数t.
 5     2.输入c \m \n用n替换m.
 6     3.输入d t删除t
 7     4.输入s 排序
 8 */
 9 #include<iostream>
10 #include<vector>
11 #include<algorithm>
12 #include<string>
13 
14 using namespace std;
15 
16 int main(){
17  vector<int> list;
18  int x=0;
19  vector<int>::iterator i;
20  cout<<"请输入一串数字,0结束"<<endl;
21  while(cin>>x){
22      if(x==0)break;
23     list.push_back(x);
24  }
25     cout<<"当前序列"<<endl;
26     for(i=list.begin();i!=list.end();i++)cout<<(*i)<<endl;
27  cout<<"请输入命令,输入z结束"<<endl;
28  char order;
29 
30  while(cin>>order){
31      if(order==z)break;
32      cout<<"order"<<order<<endl;
33      if(order==a){
34         cin>>x;
35         list.push_back(x);
36         cout<<"插入命令,已插入"<<endl;
37         cout<<"当前序列"<<endl;
38         for(i=list.begin();i!=list.end();i++)cout<<(*i)<<endl;
39      }else if(order==c){
40         char c1,c2;
41         int i1,i2;
42             cin>>c1>>i1>>c2>>i2;
43             replace(list.begin(),list.end(),i1,i2);
44         cout<<"当前序列"<<endl;
45         for(i=list.begin();i!=list.end();i++)cout<<(*i)<<endl;
46      
47      }else if(order==d){
48         cin>>x;
49         int *pos=find(list.begin(),list.end(),x);
50         list.erase(pos);
51         cout<<"当前序列"<<endl;
52         for(i=list.begin();i!=list.end();i++)cout<<(*i)<<endl;
53         
54      }else if(order==s){
55         sort(list.begin(),list.end());
56         cout<<"当前序列"<<endl;
57         for(i=list.begin();i!=list.end();i++)cout<<(*i)<<endl;     
58      }
59  }
60 }
2.输入表达式,输出值!分两种情况:中缀表达式和后缀表达式(用例是我自己编的,程序仅仅能应付个位数的加减乘除)
    测试用例  1+2*3/(4-3)  7
             12343-/*+    7
  1 /**
  2 2.输入表达式,输出值!
  3 分两种情况:中缀表达式和后缀表达式
  4 
  5  测试用例  1+2*3/(4-3)  7
  6            12343-/*+    7
  7 */
  8 #include<iostream>
  9 #include<string>
 10 #include<stack>
 11 
 12 using namespace std;
 13 
 14 int getpri(char c){
 15     if(c==+||c==-)return 1;
 16     if(c==*||c==/)return 2;
 17     if(c==(||c==))return 0;
 18 }
 19 string getpost(string s){
 20     string post="";
 21     stack<char> st;
 22     for(int i=0;i<s.length();i++){
 23         if(s[i]==+||s[i]==-||s[i]==*||s[i]==/){
 24             if(st.empty()){
 25                 st.push(s[i]);
 26             }else{
 27                 if(getpri(st.top())>getpri(s[i])){//栈顶元素优先级高 需出栈
 28                     while(getpri(st.top())>getpri(s[i])){
 29                         if(getpri(st.top())<=getpri(s[i]))break;
 30                         
 31                         post+=st.top();
 32                         st.pop();
 33                     }
 34                     st.push(s[i]);
 35                 }else{//栈顶元素优先级低 入栈
 36                     st.push(s[i]);
 37                 }
 38             }
 39         }else if(s[i]==(){
 40             st.push(s[i]);
 41         }else if(s[i]==)){//将括号里面的算符出栈
 42             while(1){
 43                 if(st.top()==()break;
 44                 post+=st.top();
 45                 st.pop();
 46             }
 47             st.pop();//(出栈
 48         }else{//数字直接输出
 49             post+=s[i];
 50         
 51         }
 52     }
 53     while(!st.empty()){
 54         post+=st.top();
 55         st.pop();
 56     }
 57 return post;
 58 }
 59 
 60 int  cal(string str){
 61     stack<int> st;
 62     for(int i=0;i<str.length();i++){
 63         if(str[i]!=+&&str[i]!=-&&str[i]!=*&&str[i]!=/){
 64         //数字直接进栈
 65             int zz=((int)str[i])-48;
 66             cout<<"入栈"<<zz<<endl;
 67             st.push(zz);
 68         }else if(str[i]==+){
 69             int a=st.top();
 70             st.pop();
 71             int b=st.top();
 72             st.pop();
 73             a=a+b;
 74             st.push(a);
 75         }else if(str[i]==-){
 76         
 77             int a=st.top();
 78             st.pop();
 79             int b=st.top();
 80             st.pop();
 81             a=b-a;
 82             st.push(a);
 83         }else if(str[i]==*){
 84         
 85             int a=st.top();
 86             st.pop();
 87             int b=st.top();
 88             st.pop();
 89             a=b*a;
 90             st.push(a);
 91         }else if(str[i]==/){
 92         
 93             int a=st.top();
 94             st.pop();
 95             int b=st.top();
 96             st.pop();
 97             a=b/a;
 98             st.push(a);
 99         }
100     
101     
102     }//for
103 return st.top();
104 
105 }
106 int main(){
107     
108     string str;
109     cout<<"请输入中缀算式"<<endl;
110     cin>>str;
111     string post;
112     post=getpost(str);
113     cout<<"post "<<post<<endl;
114     int result=cal(post);
115     cout<<result<<endl;
116     cout<<"请输入后缀算式"<<endl;
117     cin>>post;
118     result=cal(post);
119     cout<<result<<endl;
120     
121 }

 

以上是关于北理工计算机复试上机 2010的主要内容,如果未能解决你的问题,请参考以下文章

北理工计算机复试上机 2011

北理工计算机复试上机 2012

北理工计算机复试上机 2014

北理工计算机复试上机 2008

北理工计算机复试上机 2009

北理工计算机复试上机 2007