2009年北理复试上机题

1.请输入字符串,最多输入4个字符串,要求后输入的字符串排在前面,例如

输入:EricZ

输出:1=EricZ

输入:David

输出:1=David 2=EricZ

输入:Peter

输出:1=Peter 2=David 3=EricZ

输入:Alan

输出:1=Alan 2=Peter 3=David 4=EricZ

输入:Jane

输出:1=Jane 2=Alan 3=Peter 4=David

并把最后的结果保存在Name.txt中。

deque使用链接

deque和queue相比的好处是可以使用迭代器访问。

#include<iostream>
#include<string>
#include<deque> 
#include<fstream>
using namespace std;

int main()
{
    deque<string> q;
    string s;
    ofstream out("Name.txt");
    cout<<"输入字符串:"<<endl;
    deque<string>::iterator i;
    while(cin>>s)
    {
        q.push_front(s);
        int j = 1;
        for(i=q.begin();i!=q.end();i++)
        {
            cout<<j<<"="<<*i<<" ";
            out<<j<<"="<<*i<<" ";
            j++;
            if(j==5)break;
        }
        cout<<endl;
        out<<endl;
    }
    return 0;
}

2. 先输入一组数,然后输入其分组,按照分组统计出现次数并输出

例如,输入数据3,2,3,8,8,2,3

    输入对应分组1,2,3,2,1,3,1

输出:

1={2=0,3=2,8=1}

2={2=1,3=0,8=1}

3={2=1,3=1,8=0}

即每组中各数据出现的次数

map使用链接

#include<iostream>
#include<deque>
#include<map>
using namespace std;

void show(map<int, int> a)
{
    map<int, int>::iterator i;
    for (i = a.begin(); i != a.end(); i++)
    {
        if (i == a.begin()) cout << i->first << "=" << i->second;
        else cout << " " << i->first << "=" << i->second;
    }
}

int main()
{
    int a;
    deque<int> q1, q2;
    map<int, map<int, int> >mm;//存储记录表的表,mm[i]代表第i个表,mm[i][j]代表第i个表的第j个元素
    cout << "请输入数据,以0结尾:" << endl;
    while (cin >> a)
    {
        if (a == 0)break;
        q1.push_back(a);
    }
    cout << "请输入分组,以0结尾:" << endl;
    while (cin >> a)
    {
        if (a == 0)break;
        q2.push_back(a);
    }
    deque<int>::iterator it1, it2;
    for (it2 = q2.begin(); it2 != q2.end(); it2++)//二维表初始化为0 
    {
        for (it1 = q1.begin(); it1 != q1.end(); it1++)mm[*it2][*it1] = 0;
    }
    for (it1 = q1.begin(), it2 = q2.begin(); it1 != q1.end(); it1++, it2++)mm[*it2][*it1]++;
    map<int, map<int, int> >::iterator i;
    for (i = mm.begin(); i != mm.end(); i++)
    {
        cout << i->first << "={";
        show(i->second);//按表输出 
        cout << "}" << endl;
    }
    return 0;
}

3. 输入一个英文句子,把句子中的单词按出现次数按从多到少把单词和次数在屏幕上输出来,要求能识别英文句号和逗号,不要求识别其他符号。

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
    int i,st=-1,ed=-1;//开始位置
    int flag=0;//是否开始记录单词
    map<string,int> a;
    string s,s1;
 
    getline(cin,s);
 
    for(i=0; i<s.length(); i++)
    {
        if(flag==0)//还未开始标记单词
        {
            if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
            {
                flag=1;
                st=i;
            }
        }
        else if(flag==1)//已记录单词中
        {
            if(s[i]==' '||s[i]==','||s[i]=='.')
            {
                ed=i;
                s1=s.substr(st,ed-st);
                a[s1]++;
                flag=0;
                st=-1;
            }
        }
    }
    if(st!=-1)//结尾单词 
    {
        s1=s.substr(st,s.length()-st);
        a[s1]++;
    }
 
    map<string,int>::iterator it;
    cout<<"单词统计结果:"<<endl;
 
    while(!a.empty())
    {
        map<string,int>::iterator maxn;
        maxn=a.begin();
 
        for(it=a.begin(); it!=a.end(); it++)
        {
            if(it->second>maxn->second) maxn=it;//得到出现次数最多的单词 
        }
 
        cout<<maxn->first<<"="<<maxn->second<<endl;
        a.erase(maxn);//从map中删除该单词 
    }
    return 0;
}

 

posted @ 2019-08-18 00:29  郭怡柔  阅读(242)  评论(0)    收藏  举报