北理工计算机复试上机 2012

1.输入10个数,从小到大排序

示例:

输入:1,2,5,7,9,10,45,67,24,26

输出:1,2,5,7,9,10,24,26,45,67

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4 
 5     int a[10]={0};
 6     int x=0;
 7     while(x<10){
 8         cin>>a[x];
 9         x++;
10     }
11     
12     for(int i=10;i>0;i--){
13         int flag=0;
14         for(int j=1;j<i;j++){
15             if(a[j-1]>a[j]){
16                 int temp=a[j-1];
17                 a[j-1]=a[j];
18                 a[j]=temp;
19                 flag=1;
20             }
21         }//for
22         if(flag==0)break;
23     }
24 
25 
26     for(int k=0;k<10;k++){
27         cout<<a[k]<<" ";
28     }
29     cout<<endl;
30 return 0;
  }

2.学生有(学号,姓名,性别,年龄),初始化三个学生的信息
  (10,wes,f,23)(20,ert,f,45) (30,str,t,89),
然后对学生信息进行插入和删除处理
例如:
  I 12,rt,f,67
表示插入
12,rt,f,67
D10
表示删除学号为10的学生的信息
每次操作完成以后输出所有学生的信息按学号从大到
小排序
输入:
I 12,rt,f,67
输出(10,wes,f,23),(12,rt,f,67),(20,ert,f,45),(30,str,t,89)
输入:
D10
输出:
(12,rt,f,67),(20,ert,f,45),(30,str,t,89)  

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<vector>
 5 using namespace std;
 6 
 7 
 8 class Student{
 9 public:
10     int id;
11     string name;
12     char sex;
13     int age;
14 };
15 
16 bool des(Student a,Student b){
17 return a.id>b.id;
18 };
19  int main(){
20     vector<Student> students;
21     Student s;
22     s.id=10;
23     s.name="wes";
24     s.sex='f';
25     s.age=23;
26     students.push_back(s);
27 
28     s.id=20;
29     s.name="wes";
30     s.sex='f';
31     s.age=23;
32     students.push_back(s);
33 
34     s.id=30;
35     s.name="wes";
36     s.sex='f';
37     s.age=23;
38     students.push_back(s);
39     char order;
40     cout<<"请输入命令"<<endl;
41         vector<Student>::iterator i;
42 
43     while(cin>>order){
44         if(order=='I'){
45             cout<<"亲输入学生信息"<<endl;
46             cin>>s.id>>s.name>>s.sex>>s.age;
47             students.push_back(s);
48             sort(students.begin(),students.end(),des);
49             for(i=students.begin();i!=students.end();i++)
50             {
51                 cout<<(*i).id<<" "<<(*i).name<<" "<<(*i).sex<<" "<<(*i).age<<endl;
52             }
53         }
54         if(order=='D'){
55             cout<<"请输入删除学号"<<endl;
56             int dnum;
57             cin>>dnum;
58             for(i=students.begin();i!=students.end();i++){
59                 if((*i).id==dnum)
60                 {
61                     students.erase(i);
62                     break;
63                 }
64             
65             }
66             sort(students.begin(),students.end(),des);
67             for(i=students.begin();i!=students.end();i++)
68             {
69                 cout<<(*i).id<<" "<<(*i).name<<" "<<(*i).sex<<" "<<(*i).age<<endl;
70             }
71         }    
72     }
73 return 0;
74 }

3.利用后序和中序确定前序遍历结果
示例:
  输入(按后序、中序):CHBEDA  CBHADE
  输出:ABCHDE    

  

 1 #include<iostream>
 2 #include<string>
 3 
 4 using namespace std;
 5 
 6 typedef struct TNode
 7 {
 8     char data;
 9     struct TNode *lchild,*rchild;
10 
11 }*Tree;
12 
13 void CreateTree(Tree &root,string in,string post);
14 void PreOrder(Tree T);
15 
16 int main()
17 {/**
18 3.利用后序和中序确定前序遍历结果
19 示例:
20   输入(按后序、中序):CHBEDA  CBHADE
21   输出:ABCHDE
22 */
23     string in,post;
24     cout<<"请输入中序和后序遍历序列"<<endl;
25     cin>>post>>in;
26     Tree T;
27     CreateTree(T,in,post);
28     PreOrder(T);
29     cout<<endl;
30     return 0;
31 }
32 void PreOrder(Tree T)
33 {
34     if(T!=NULL)
35     {
36         cout<<T->data;
37         PreOrder(T->lchild);
38         PreOrder(T->rchild);
39     }
40 
41 }
42 
43 void CreateTree(Tree &root,string in,string post)
44 {
45     if(in.length()==0)return;
46 
47         root=new TNode();
48         root->data=post[post.length()-1];
49         root->lchild=root->rchild=NULL;
50 
51         string ina,inb,posta,postb;
52         int pos=in.find(post[post.length()-1]);//找到根节点在中序便利中的位置
53         ina=in.substr(0,pos);//截取从零开始的pos个字符  就是左子树的中序便利序列
54         inb=in.substr(pos+1);//截取pos后的所有字符      就是右子树的中序便利序列
55         posta=post.substr(0,ina.length());//截取后续便利的前一段      就是左子树的后续便利序列,和左子树中序遍历序列个数相同
56         postb=post.substr(ina.length(),inb.length());
57 
58         CreateTree(root->lchild,ina,posta);
59         CreateTree(root->rchild,inb,postb);
60 
61 
62 }
原文地址:https://www.cnblogs.com/PPWEI/p/8453619.html