科软25机试

题目:

2025科软复试上机题(回忆版)题解_哔哩哔哩_bilibili

1. 字符串反转

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

void solve(string& a, int CurN) {
    if (!(CurN % 2)) {
        int right = a.size() - 1;
        int left = 0;
        while (left < right) {
            swap(a[left], a[right]);
            left++;
            right--;
        }
    }
}

void print(vector<string>& ans) {
    for (int i = 0; i < ans.size(); i++) {
        cout << ans[i] << " ";
    }
    cout << endl; 
}

int main() {
    string s;
    getline(cin, s);
    stringstream ss(s);
    string tmpStr;
    int count = 0;
    vector<string> ans;
    while (getline(ss, tmpStr, ' ')) {
        ans.push_back(tmpStr);
    }
    for (int i = 0; i < ans.size(); i++) {
        solve(ans[i], i + 1);
    }
    print(ans);
    return 0;
}

2.进制转换 

思路:将32进制字符串转换为十进制数;将十进制数转换为八进制字符串
#include<bits/stdc++.h>
using namespace std;
unordered_map<char, int> base32ToDec = {
    {'0', 0}, {'1', 1}, {'2', 2}, {'3', 3}, {'4', 4}, {'5', 5}, {'6', 6}, {'7', 7},
    {'8', 8}, {'9', 9}, {'A', 10}, {'B', 11}, {'C', 12}, {'D', 13}, {'E', 14}, {'F', 15},
    {'G', 16}, {'H', 17}, {'I', 18}, {'J', 19}, {'K', 20}, {'L', 21}, {'M', 22}, {'N', 23},
    {'O', 24}, {'P', 25}, {'Q', 26}, {'R', 27}, {'S', 28}, {'T', 29}, {'U', 30}, {'V', 31}
};
int solve1(string& Str32) {
    int decimalValue = 0;
    int length = Str32.length();
    for (int i = 0; i < length; ++i) {
        char ch = Str32[i];
        decimalValue += base32ToDec[ch] * static_cast<int>(pow(32, length - i - 1));
    }
    return decimalValue;
}
string solve2(int decimalValue) {
    string octalStr;
    while (decimalValue > 0) {
        octalStr += to_string(decimalValue % 8);
        decimalValue /= 8;
    }
    reverse(octalStr.begin(),octalStr.end());
    return octalStr.empty() ? "0" : octalStr;
}
int main() {
    string Str32; 
	getline(cin,Str32);
    int decimalValue = solve1(Str32);
    string octalStr = solve2(decimalValue);
	cout<<octalStr<<endl;
    return 0;
}

3. 区间移除 

#include<bits/stdc++.h>>
using namespace std;
int solve(vector<pair<int, int>>& arr) {
    if (arr.empty()) return 0;
    sort(arr.begin(), arr.end(), [](pair<int, int> a, pair<int, int> b) {
        return a.second < b.second; 
    });
    int count = 0; 
    int end = INT_MIN;
    for (auto& it :arr) {
        if (it.first >= end) {
            end = it.second;
        } else {
            count++;
        }
    }
    return count;
}
int main() {
    int n;
    cin >> n;
    vector<pair<int, int>> ans(n);
    for (int i = 0; i < n; i++) {
        cin >> ans[i].first >> ans[i].second;
    }
    cout << solve(ans) << endl;
    return 0;
}

4. 机器人

#include<bits/stdc++.h>
using namespace std;
int m, n;
vector<vector<int>> grid;
vector<vector<bool>> visited;
int maxValue = -1;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
void dfs(int x, int y, int sum) {
    if (x == m - 1 && y == n - 1) {
        maxValue = max(maxValue, sum);
        return;
    }
    visited[x][y] = true;
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (nx >= 0 && nx < m && ny >= 0 && ny < n && !visited[nx][ny] && grid[nx][ny] != -1) {
            dfs(nx, ny, sum + grid[nx][ny]);
        }
    }
    visited[x][y] = false;
}
int main() {
    cin >> m >> n;
    grid.resize(m, vector<int>(n));
    visited.resize(m, vector<bool>(n, false));
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            string value;
            cin >> value;
            if (value == "#") {
                grid[i][j] = -1; 
            } else {
                grid[i][j] = stoi(value);
            }
        }
    }
    if (grid[0][0] == -1 || grid[m-1][n-1] == -1) {
        cout << -1 << endl;
        return 0;
    }
    dfs(0, 0, grid[0][0]);
    cout << maxValue << endl;
    return 0;
}

据说这次的机试很难,由于我没有真实的上机的环境,所以完全凭借经验分享一下我的解题思路(有疑问的可以发在评论区)

### 回答1: 南大是指南京大学件学院进行的选拔性考,主要用于选拔优秀的计算学与技术专业学生。而CSDN是中国最大的IT技术社区和知识服务平台,提供大量的技术博客、问答、培训等服务。 南大的题目通常包括计算基础知识、编程能力、数据结构算法等内容。通过,南大院可以了解考生的基础知识水平、动手能力和解决问题的能力,从而选拔出最优秀的学生。 而CSDN作为一个IT技术社区,为计算学与技术专业的学生和从业者提供了一个优质的学习和交流平台。在CSDN上,可以浏览到大量的技术博客,以及相关技术问题的解决方案。通过参与CSDN,学生们能够及时了解最新的技术动态和行业发展趋势,提升自己的技术实力。 因此,南大和CSDN都在不同层面上为计算学与技术专业的学生提供了有益的会和资源。通过参加南大,学生们有会进一步提升自己的编程和解决问题的能力,从而在未来的学习和工作中更加出色。而通过参与CSDN,学生们可以在该平台上获取到丰富的技术资源,并与其他志同道合的人进行交流和学习,以更好地提升自己的专业水平。 ### 回答2: 南京大学件学院是指南京大学件学院举办的面向计算学与技术专业的器编程实践能力考。在这场中,考生需要完成一系列的编程题目,以展示他们的编程能力和解决问题的能力。 南京大学件学院的一般分为两个部分:编程题和理论题。编程题部分会考察考生在数据结构算法和编程语言等方面的知识,要求考生用编程语言解决一定的问题,例如实现某个算法数据结构,或者完成一道编程题目。理论题部分则考察考生对计算学基础知识的掌握程度,包括计算网络、操作系统、数据库等。 南京大学件学院举办的目的是为了选拔具有较强编程能力和解决实际问题能力的学生,以便保证学院培养出的学生具备扎实的专业知识和实践能力。成绩在考生的综合素质评定中占有重要的比重,对考生的录取结果有着直接的影响。 参加南京大学件学院的考生应该具备良好的计算编程基础知识,对数据结构算法有深入的理解,同时还需要具备良好的解决问题和编程能力。对于准备参加的考生来说,平时要多进行编程练习,多从理论和实践两方面进行复习。 总之,南京大学件学院是一个重要的考核环节,对考生的编程实践能力和解决问题的能力进行了全面的评估。参加的考生应该充分准备,以取得良好的成绩。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值