北理工计算机考研复试上机2024年真题

1、输入一组单词(区分大小写),统计首字母相同的单词的个数,相

同的单词不累加,输出格式:“字母,个数”

input: I am a boy,you are a boy.

output:

I,1

a,3

b,1

y,1

代码:

#include <bits/stdc++.h>
using namespace std;

vector<int> nums; // 存数


int main()
{
    string s;
    getline(cin, s);
    // 分解单词
    vector<string> ans;
    int i = 0;
    while (i < s.size()) {
        for (int j = i; j <= s.size(); j++) {
            if (s[j] == ' ' || s[j] == ',' || s[j] == '.') {
                ans.push_back(s.substr(i, j-i));
                i = j+1;
                break;
            }
        }
    }    

    for (string i : ans) {
        cout << i << endl;
    }

    set<string> se;
    for (string i : ans) {
        se.insert(i);
    }

    map<char,int> m;
    for (auto i : se) {
        m[i[0]]++;
    }

    for (auto it : m) {
        cout << it.first << ',' << it.second << endl;
    }
}   

2、输入一组单词,(区分大小写),输出其字典排序。

input:  Information Info Inform info Suite suite suit

output: Info Inform Information Suite info suit suite

代码:

#include <bits/stdc++.h>

using namespace std;

priority_queue<string,vector<string>,greater<string>> q;
int main()
{
	string s;
	while (cin >> s) {
		q.push(s);
		if (getchar() == '\n') break; 
	}
	
	while (!q.empty()) {
		cout << q.top();
		if (q.size() > 1) cout << ','; 
		q.pop();
	}
	return 0;
}

3、给一个字符串(aaaa(bbbb(cccc,dddd),eeee(ffff)))该字符串

表明的是各个人的层次关系。

比如aaaa是bbbb和eeee的领导,bbbb是cccc和dddd的领导。

现输入一个名称,比如ffff,要求输出其领导关系

input:  (aaaa(bbbb(cccc,dddd),eeee(ffff)))

output: aaaa>eeee>ffff

代码:

#include <bits/stdc++.h>

// 遇到( 如果栈里面没有 ), 那么( 左边的字母就是一个祖先  前提是( 左边有字母 
// 遇到)直接进栈 
using namespace std;
int main()
{
    string s;
    stack<char> st;
    string tar;
    cin >> s >> tar;
    int idx = -1; // 目标人物的下标
    for (int i = 0; i < s.size(); i++) 
        if(s[i] == tar[0]) {
            idx = i;
            break;
        }    
    
    vector<string> ans; // 存储领导关系  
    ans.push_back(tar);
    for (int i = idx-1; i >= 0; i--) {
        if (s[i] == ')') st.push(s[i]); // 栈里面只存右括号
        else if (s[i] == '(') {
            if (i - 1 >= 0 && isalpha(s[i-1])) { // 左括号的左边是一个人
                if (st.size() == 0) ans.push_back(s.substr(i-4, 4));
                else st.pop();
            }
        }
    }
    for(int i = ans.size()-1; i >= 0; i--) {
        cout << ans[i];
        if (i != 0) cout << '>';
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值