北京理工大学计算机学院复试上机题目
由于编者水平有限,如有错误,请多多包涵。欢迎各位指正,转载请注明,谢谢合作!
1.输入一组单词(区分大小写),统计首字母相同的单词的个数,相
同的单词不累加,输出格式:“字母,个数”。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string data[100];
int n=0;
while(cin>>data[n++]);
n--;
// 排序后,保证相同首字母的单词相邻
sort(data,data+n);
// 当前统计的首字母
char now=data[0][0];
// 当前首字母出现的次数
int count=1;
for(int i=1;i<n;i++){
// 与前一个单词首字母相同
if(data[i][0]==now)
count++;
else{
cout<<now<<","<<count<<endl;
now=data[i][0];
count=1;
}
}
// 输出最后一个字母的数据
cout<<now<<","<<count<<endl;
return 0;
}
2.输入 一组单词,(区分大小写),输出其字典排序。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string data[100];
int n=0;
while(cin>>data[n++]);
n--;
// 排序
sort(data,data+n);
// 输出
for(int i=0;i<n;i++){
cout<<data[i]<<" ";
}
cout<<endl;
return 0;
}
3.给一个字符串(aaaa(bbbb(cccc,dddd),eeee(ffff)))该字符串
表明的是各个人的层次关系。
比如aaaa是bbbb和eeee的领导,bbbb是cccc和dddd的领导。
现输入一个名称,比如ffff,要求输出其领导关系。
输出:aaaa>eeee>ffff
#include<iostream>
#include<string>
using namespace std;
/**
* 根据描述的领导关系,建立一个树形结构,
* 树的表示方法用双亲表示法,即每个节点有个指针指向其父节点(直接领导),
* 存储结构采用数组,方便遍历。
*/
// 当前人数
int num=0;
struct bNode{
string name;
int lead;
} rel[100];
// k为扫描字符串的位置,l为当前直接领导
int f(string data,int k,int l){
if(data[k]=='\0')
return 0;
// 当前姓名
string t="";
while(data[k]!=')'){
while(data[k]!=')'&&data[k]!=','&&data[k]!='('&&data[k]!='\0'){
t+=data[k++];
}
if(t!=""){
rel[++num].name=t;
rel[num].lead=l;
t="";
}
// 遇到一层领导关系,树长高一层
if(data[k]=='(')
k=f(data,k+1,num);
// 无效字符,略过
else if(data[k]==',')
k++;
else if(data[k]=='\0')
return 0;
}
// 返回当前扫描字符串的位置
return k+1;
}
int main(){
string data;
cin>>data;
// 建立关系树
f(data,0,-1);
// 查询领导关系
string p;
cin>>p;
// 查询p的位置
int i;
for(i=0;i<num+1;i++)
if(p==rel[i].name)
break;
if(i==num+1)
cout<<"查无此人!"<<endl;
else{
// 输出缓冲区
string print=p;
while(rel[i].lead!=0){
print=">"+print;
print=rel[rel[i].lead].name+print;
i=rel[i].lead;
}
cout<<print<<endl;
}
return 0;
}