北理工计算机复试上机 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

### 关于工大学计算机复试上机考试的内容 #### 考试概述 工大学计算机专业的复试上机考试通常涉及编程能力测试,主要考察考生对算法设计、数据结构应用以及程序实现的能力。试题难度适中,覆盖范围广泛,包括但不限于基础算法、字符串操作、数组处等内容。 #### 历年典型题目分析 1. **等腰梯形绘制** 给定高度和底边宽度,要求编写程序输出一个由字符组成的等腰梯形形状[^1]。此题旨在检验考生对于循环控制语句的解程度及其灵活运用水平。 2. **分段函数计算** 定义特定形式的分段函数f(x),通过给定的一系列x值来求解对应的y=f(x)的结果[^2]。这类问题重点在于分支逻辑判断是否清晰合。 3. **学生成绩管** 输入若干名学生的个人信息(含三科分数),筛选并打印未达标者名单;另外还需依据总评得分降序排列全体学员资料再予以展示[^3]。这道综合型习题不仅考验基本语法掌握情况还涉及到排序技巧的应用实践。 4. **数字组合探索** 设定约束条件寻找符合条件的所有整数集合{a,b,c}使得表达式成立:abc+bcc=532[^4]。此类枚举类问题是训练穷举法思维的好素材。 5. **字符串整** 接收一段自由文本作为参数传入后对其进行重新编排——按照字母表顺序调整各组成单元的位置关系最终得到新序列呈现出来[^5]。该任务突出强调了关于字符串的操作技能。 ```cpp // 示例代码片段用于解决上述提到的部分问题之一即查找满足 abc + bcc = 532 的所有可能数值组合 #include <iostream> using namespace std; int main(){ int a,b,c; bool flag=false; //标记是否有解 for(a=0;a<=9 && !flag;a++) { for(b=0;b<=9&&!flag;b++){ for(c=0;c<=9 ;c++){ if( (a*100+b*10+c)+(b*100+c*10+c)==532 ){ cout<<"Solution:"<<endl; cout<<a<<","<<b<<","<<c<<endl; flag=true;//找到第一个就停止继续搜索其他可能性 } } } } return 0; } ``` #### 复试准备建议 为了更好地应对这样的考核环节,可以采取如下策略: - 加强基础知识复习巩固; - 积累常见算法模板记忆背诵; - 提升实际动手编码练习频率强度; - 参加模拟演练熟悉真实考场环境氛围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值