cs研究生面试机试题(持续更新)

目录

说明:

1、计算Sn (北大)

2、字符串翻转(贵州大学)

3、求1-n的和(北大)

4、排序(兰州大学)

5、字符移动(兰州大学)

6、反序数(清华大学)

7、加密算法

8、整除(贵州大学)


说明:

筛选了各学校的难度较低和考点频率较高的机试题目,注意高校机考时,大多数高校的机考系统不同于Leetcode, 需要自己写输入输出(参考ACM模式),每道题目备注了题目出处,当然可能多个学校考察过。

1、计算Sn (北大)

思路:

关键是理解每个项是前一个项×10+a。

代码:

2、字符串翻转(贵州大学)

题解:

法一:

法二:

C++ 标准库函数 reverse

3、求1-n的和(北大)

法一:循环累加

法二(更优):等差数列求和公式

4、排序(兰州大学)

用C++的STL来做,将奇数和偶数分别存在vector中,分别进行排序后再输出。

(注意需要用到容器的哪个工具,要包含对应的头文件,比如用到vector,需在头部添加 #include <vector>)。

n是每组测试用例的数字个数。

复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    int n;
    while(cin >> n){  // 多组输入:读取每组数字个数
        vector<int> odds, evens;  // 存奇数、偶数
        for(int i=0; i<n; i++){
            int num;
            cin >> num;
            if(num % 2 != 0){
                odds.push_back(num);
            }else{
                evens.push_back(num);
            }
        }
        
        // 分别升序排序
        sort(odds.begin(), odds.end());
        sort(evens.begin(), evens.end());
        
        // 输出奇数:无行首空格
        for(int i=0; i<odds.size(); i++){
            if(i>0) cout << " ";
            cout << odds[i];
        }
        
        // 输出偶数:衔接奇数,控制空格
        for(int i=0; i<evens.size(); i++){
            if(i==0 && !odds.empty()){  // 有奇数时,偶数第一个元素前加空格
                cout << " ";
            }
            if(i>0) cout << " ";       // 偶数内部后续元素加空格
            cout << evens[i];
        }  // 这个大括号是偶数循环的结束
        
        cout << endl;  // 每组输出后换行(必须在while循环内)
    }  // 这个大括号是while循环的结束
    return 0;
}

5、字符移动(兰州大学)

和前一道题类似,使用STL,将数字和字符单独存在string中,这里判断是不是数字使用cctype的isdigit()函数。

复制代码
#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main(){
	string s,result;
	string digit,non_digit;
	getline(cin,s);
	for(char c:s){
		if(isdigit(c)){
			digit+=c;
		}
		else{
			non_digit+=c;
		}
	}
	result = non_digit+digit;
	cout<<result<<endl;
	return 0;
}

如果像前一道题那样,需要排序,加下面两排代码就行。

复制代码
// 分别排序
    sort(non_digit.begin(), non_digit.end());  // 非数字按ASCII升序
    sort(digit.begin(), digit.end());          // 数字按字符/数值升序(等价)

6、反序数(清华大学)

思路:循环遍历所有的四位数,将int型的数反转转为string后在转回int,得到其反序数,再判断是否是9倍关系。

7、加密算法

解题关键是如何获取其后的第三个字母,这里需要熟练记住,当成一个模版直接用。

c = (c - 'A' + 3) % 26 + 'A';

复制代码
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    getline(cin, s);  // 读取整行输入(包含空格)
    
    // 遍历每个字符,&表示直接修改原字符串,无需额外拼接
    for (char &c : s) {  
        if (c >= 'A' && c <= 'Z') {
            // 大写字母:位移3位,超出Z则循环
            c = (c - 'A' + 3) % 26 + 'A';
        } else if (c >= 'a' && c <= 'z') {
            // 小写字母:位移3位,超出z则循环
            c = (c - 'a' + 3) % 26 + 'a';
        }
        // 其他字符(数字、空格等)不做处理
    }
    
    cout << s << endl;  // 输出加密后的字符串
    return 0;
}

8、整除(贵州大学)

注意这里要求每一行结尾没有空格输出,技巧是在每个数字输出之前输出空格并特殊处理第一个数字。

复制代码
#include <iostream>
using namespace std;

int main() {
    int count = 0; // 计数器,记录已输出的数的个数
    for (int i = 100; i <= 1000; ++i) { // 注意:题目是100到1000之间,包含1000
        if (i % 30 == 0) { // 能被5和6同时整除等价于能被30整除
            ++count;
            // 控制格式:不是第一个数时先输出空格
            if (count > 1) cout << " ";
            cout << i;
            // 每10个数换行
            if (count % 10 == 0) {
                cout << endl;
            }
        }
    }
    // 如果最后一行不足10个数,手动补换行
    if (count % 10 != 0) {
        cout << endl;
    }
    return 0;
}
相关推荐
1231566802 小时前
PAT 1017 A除以B
c语言·数据结构·算法·pat考试
芯片-嵌入式2 小时前
具身智能(2):OpenExplorer下的模型量化
人工智能·深度学习·算法
Yusei_05232 小时前
C++14入门
c++·算法
YLXA2 小时前
1.helle_cuda学习
linux·学习·算法
Storynone2 小时前
【Day21】LeetCode:93. 复原IP地址,78. 子集,90. 子集 II
python·算法·leetcode
ab1515172 小时前
3.14二刷基础93 94 83 98 99 完成进阶40 43
算法
nananaij2 小时前
【LeetCode-01 两数之和 python解法】
开发语言·python·算法·leetcode
crescent_悦2 小时前
PTA C++:正整数A+B
数据结构·c++·算法
丶小鱼丶2 小时前
数据结构和算法之【链表】
java·数据结构·算法