编程题(北理工计算机考研复试上机)1

1

显示出如下数组中的所有元素,并使用二分查找法在数组中查找元素。
int a[]={-90,-32,12,16,24,36,45,59,98,120};

输入输出示例:

-90 -32 12 16 24 36 45 59 98 120
请输入所要查找的元素:24
输出:第5个元素为24,比较次数为1
请输入所要查找的元素:120
输出:第10个元素,比较次数为4
请输入所要查找的元素:6
输出:查找失败 比较次数为3

#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;


int main()
{
	int a[] = { -90,-32,12,16,24,36,45,59,98,120};
	int b = 0;
	int c = 0;
	int low = 0, high = 9, mid = 0;
	bool flag = 0;


	cout << "请输入所要查找的元素:";
	while (cin>>b) {
		flag = 0;
		low = 0;
		high = 9;
		c = 0;
		while (low <= high) {
			mid = (low + high) / 2;
			if (a[mid] == b) {
				flag = 1;
				c++;
				cout << "第" << mid+1 << "个元素为" << a[mid] << ",比较次数为" << c << endl;
				break;
			}
			else if (a[mid] > b) {
				high = mid - 1;
				c++;
			}				
			else {
				low = mid + 1;
				c++;
			}	
		}
		if (!flag)
			cout << "查找失败 比较次数为" << c << endl;
		cout << "请输入所要查找的元素:";
	}

	return 0;
}

2

输入学生个数以及每个学生的姓名和3门课程成绩:输出不及格学生的信息;按平均成绩排序,从高到低输出学生信息。

输入示例:

5

zhaoyi 70 80 91

zhanger 68 40 90

zhangsan 60 70 80

lisi 70 80 90

wangwu 52 70 100

输出示例:

zhanger score:68 40 99

wangwu score:52 70 100

[1] name:zhaoyi 70 80 91

[2] name:lisi 70 80 90

[3] name:wangwu 52 70 100

[4] name:zhangsan 60 70 80

[5] name:zhanger 68 40 99

#include "pch.h"
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

struct stu {
	string name;
	int s1;
	int s2;
	int s3;
	int ave;
};

bool cmp(stu a, stu b) {
	return a.ave > b.ave;
}

int main()
{
	const int L = 100;
	stu s[L];
	int i = 0, j = 0;
	int c = 0;

	cout << "输入:" << endl;
	c = 0;
	while (cin >> s[i].name >> s[i].s1 >> s[i].s2 >> s[i].s3) {
		s[i].ave = (s[i].s1 + s[i].s2 + s[i].s3) / 3;
		c++;
		i++;
		if (c >= 100)
			break;		
	}

	cout << "不及格:" << endl;
	for (i = 0; i < c; i++) {
		if (s[i].s1 < 60 || s[i].s2 < 60 || s[i].s3 < 60) {
			cout << s[i].name << ' ' << s[i].s1 << ' ' << s[i].s2 << ' ' << s[i].s3 << endl;
		}
	}

	cout << "排名:" << endl;
	sort(s, s + c, cmp);
	for (i = 0; i < c; i++) {
		cout << '[' << i + 1 << ']' << ':';
		cout << s[i].name << ' ' << s[i].s1 << ' ' << s[i].s2 << ' ' << s[i].s3 << endl;
	}

	return 0;
}

3

输入学生信息,姓名 成绩(成绩的数目不一定)
输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

struct student {
	string name;
	vector<int> score;
	int num;
	int ave;
};

bool cmp(student& a, student& b) {
	return a.num > b.num;
}

int main() {
	string info;
	student stu;
	vector<student> s;
	int i = 0, j = 0;
	int f = 0;
	bool flag = 0;
	int sum = 0;

	
	flag = 1;
	while (cin >> info) {
		try {
			f = stoi(info);
			stu.score.push_back(f);
		}
		catch (...) {
			if (flag) {				
				stu.name = info;
				flag = 0;
			}
			else {
				s.push_back(stu);
				stu.score.clear();
				stu.name = info;
			}
		}
	}
	s.push_back(stu);

	for (i = 0; i < s.size(); i++) {
		s[i].num = 0;
		sum = 0;
		for (j = 0; j < s[i].score.size(); j++) {
			sum += s[i].score[j];
			if (s[i].score[j] < 60) {
				s[i].num++;
			}
		}
		s[i].ave = sum / s[i].score.size();
	}
	
	cout << "不及格科目数超过2:";
	for (i = 0; i < s.size(); i++) {
		if (s[i].num > 2) {
			cout << s[i].name;
		}
	}
	cout << endl;

	sort(s.begin(), s.end(), cmp);
	for (i = 0; i < s.size(); i++) {
		cout << s[i].name << ":" << s[i].num << s[i].ave << endl;
	}
	

	return 0;
}

输入:
zhangsan 20 30 40
lisi 100 20
wangwu 20 50 60 70 45 46
输出:
在这里插入图片描述

4

输入字符串,输出字符串中包含的数字,比如 2.3ABC0-2.3 输出 2.3 0 -2.3。
注意一些特殊的情况如+004.500值为+4.5

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
	string str;
	vector<string> ss;
	vector<string>::iterator it;
	int i = 0, j = 0, k = 0;

	while (cin >> str) {
		for (i = 0; i < str.size(); i++) {
			if (str[i] >= '0'&&str[i] <= '9') {
				for (j = i; j < str.size(); j++) {
					if (str[j] >= '0'&&str[j] <= '9' || str[j] == '.') {
						continue;
					}
					else {
						break;
					}
				}
				ss.push_back(str.substr(i, j - i));
				i = j - 1;
			}
			else if (str[i] == '-' || str[i] == '+') {
				if (i + 1 < str.size()) {
					for (j = i + 1; j < str.size(); j++) {
						if (str[j] >= '0'&&str[j] <= '9' || str[j] == '.') {
							continue;
						}
						else {							
							break;
						}
					}
					if (j > i + 1) {
						ss.push_back(str.substr(i, j - i));
						i = j - 1;
					}					
				}
			}
		}
		
		for (it = ss.begin(); it != ss.end(); it++) {
			if ((*it).size() < 2)
				continue;

			if ((*it)[0] == '+' || (*it)[0] == '-') {
				while ((*it)[1] == '0') {
					(*it).erase((*it).begin()+1);
				}
				while ((*it)[(*it).size()-1] == '0') {
					(*it).erase((*it).end()-1);
				}
				
			}
			else {
				while ((*it)[0] == '0') {
					(*it).erase((*it).begin());
				}
				while ((*it)[(*it).size() - 1] == '0') {
					(*it).erase((*it).end()-1);
				}
				
			}
		}

		for (it = ss.begin(); it != ss.end(); it++) {
			cout << *it << endl;
		}
		cout << "---\n" << endl;
		ss.clear();
	}

	return 0;
}

5

字符串由“碎片”组成,每个碎片为单一字母所组成,如“aaabbccaddd”由碎片“aaa”“bb”“cc”“a”“ddd”组成。
输入:一个字符串
输出:按字典序输出组成字符串的碎片,每个碎片一行,相同的碎片只输出一次

输入:aaabbaccdddda
输出:
a
aaa
bb
cc
dddd

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
	string input;
	vector<string> ss;
	vector<string>::iterator e, it;
	int i = 0, j = 0;

	while (cin >> input) {
		for (i = 0; i < input.size(); i++) {
			for (j = i; j < input.size(); j++) {
				if (input[i] != input[j]) {
					break;
				}
			}
			ss.push_back(input.substr(i, j - i));
			i = j - 1;
		}
		sort(ss.begin(), ss.end());
		e = unique(ss.begin(), ss.end());
		for (it = ss.begin(); it!=e; it++) {
			cout << *it << endl;
		}
		ss.clear();
	}

	return 0;
}

6

求哈夫曼树的最短带权路径长度
输入:第一行为权值个数n,第二行是n个权值
输出:最短带权路径长度

输入:
4
2,4,5,7
输出:
35

输入:
4
1,1,1,1
输出:
8

最短带权路径长度 = 所有非叶节点权值之和

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;


int main() {

	int n = 0;
	int i = 0, temp = 0;
	int sum = 0;
	vector<int> power;

	cin >> n;
	for (i = 0; i < n; i++) {
		cin >> temp;
		power.push_back(temp);
	}

	sort(power.begin(), power.end());

	sum = 0;
	while (power.size() != 1) {
		sum += power.at(0) + power.at(1);
		power.push_back(power.at(0) + power.at(1));
		power.erase(power.begin());
		power.erase(power.begin());
		sort(power.begin(), power.end());
	}
	cout << sum << endl;
	
	return 0;
}

最大回文子串

输入一个只含有英文字母的字符串,输出最大回文子串的长度及此长度回文子串的个数(回文不区分大小写)。
测试样例:
aBaAb (最大回文子串为BaAb)
4 1

aBcbBb (最大回文子串为Bcb和bBb)
3 2

aB
1 2

aBcbB
3 1

aaaaaa
6 1

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;


int main() {
	int i = 0, j = 0;
	int count = 0;
	int L = 0;
	string str;
	string s1, s2;
	bool flag = 0;

	getline(cin, str);
	for (i = 0; i < str.size(); i++) {
		if (str[i] >= 'A' && str[i] <= 'Z') {
			str[i] += 'a' - 'A';
		}
	}

	flag = 0;
	for (i = str.size(); i > 0; i--) {
		count = 0;
		for (j = 0; j < str.size() - i + 1; j++) {
			s1 = str.substr(j, i);
			s2 = s1;
			reverse(s2.begin(), s2.end());
			if (s1 == s2) {
				L = i;
				count++;
				flag = 1;
			}
		}
		if (flag)
			break;
	}

	cout << L << "    " << count << endl;
	
	return 0;
}

文件记录序列

在这里插入图片描述
在这里插入图片描述
file() 是第一题
file2() 是第二题

#include<iostream>
#include<algorithm>
#include<vector>

#define MAXSIZE 10

using namespace std;

struct fcb {
	int name;
	int time;
	fcb():name(0),time(0){}
};

bool cmp(fcb x, fcb y) {
	return x.time < y.time;
}

void file() {
	int Q[MAXSIZE] = { 0 };
	int len = 0, front = 0, rear = 0;
	int f = 0;
	int i = 0;

	cout << "输入:";
	while (cin >> f) {
		if (len < 3) {
			if (len == 0) {
				Q[rear++] = f;
				len++;
			}
			else if (len == 1 && Q[front] != f) {
				Q[rear++] = f;
				len++;
			}
			else if (len == 2 && Q[front] != f && Q[front + 1] != f) {
				Q[rear++] = f;
				len++;
			}
		}
		else {
			if (Q[front] != f && Q[(front + 1) % MAXSIZE] != f && Q[(front + 2) % MAXSIZE] != f) {
				Q[rear] = f;
				rear = (rear + 1) % MAXSIZE;
				front = (front + 1) % MAXSIZE;
			}
		}

		cout << "输出:";
		for (i = len - 1; i >= 0; i--) {
			cout << Q[(front + i) % MAXSIZE] << "  ";
		}
		cout << endl;
		cout << "输入:";
	}
}

void file2() {
	int f = 0;
	vector<fcb> F;
	int i = 0, j = 0;
	fcb temp;
	int m = 0;

	cout << "输入:";
	while (cin >> f) {

		for (i = 0; i < F.size(); i++) {
			if (F[i].name == f) {
				for (j = 0; j < F.size(); j++) {
					if (j != i) {
						F[j].time++;
					}
				}
				F[i].time = 0;
				break;
			}
		}
		if (i == F.size() && F.size() < 3) {
			for (j = 0; j < F.size(); j++) {
				F[j].time++;
			}
			temp.name = f;
			temp.time = 0;
			F.push_back(temp);
		}
		else if (i == F.size() && F.size() >= 3) {
			m = 0;
			for (j = 1; j < F.size(); j++) {
				if (F[j].time > F[m].time) {
					m = j;
				}
			}
			F.erase(F.begin() + m);
			for (j = 0; j < F.size(); j++) {
				F[j].time++;
			}
			temp.name = f;
			temp.time = 0;
			F.push_back(temp);
		}
		

		sort(F.begin(), F.end(), cmp);
		cout << "输出:";
		for (i = 0; i < F.size(); i++) {
			cout << F[i].name << ends;
		}
		cout << endl;
		cout << "输入:";
	}
}

int main() {
	
	//file();
	file2();

	return 0;
}

字符串处理

在这里插入图片描述
在这里插入图片描述

#include "pch.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

typedef struct student {
	int id;
	string name;
	char sex;
	string age;
	student():id(0),name(""),sex('f'),age(""){}
}Stu;

bool my_cmp(Stu a, Stu b)
{
	return a.id < b.id;
}

int trans(string s)
{
	int num = 0;

	for (int i = 0; i < s.size(); i++) {
		num *= 10;
		num += s[i] - '0';
	}

	return num;
}

int main()
{
	vector<Stu> stu;
	Stu temp;

	temp.id = 10;
	temp.name = "wes";
	temp.sex = 'f';
	temp.age = "23";
	stu.push_back(temp);

	temp.id = 20;
	temp.name = "ert";
	temp.sex = 'f';
	temp.age = "45";
	stu.push_back(temp);

	temp.id = 30;
	temp.name = "str";
	temp.sex = 't';
	temp.age = "89";
	stu.push_back(temp);

	string m;
	int i = 0, j = 0;
	int ID = 0;

	while (cin >> m) {
		if (m[0] == 'I') {
			for (i = 1; m[i] != ','; i++);
			temp.id = trans(m.substr(1, i - 1));
			//cout << m.substr(1, i - 1) << endl;
			j = ++i;
			for (; m[i] != ','; i++);
			temp.name = m.substr(j, i - j);
			//cout << m.substr(j, i - j) << endl;
			j = ++i;
			temp.sex = m[j];
			//cout << m[j] << endl;
			i += 2;
			temp.age = m.substr(i, m.size() - i);
			//cout << m.substr(i, m.size() - i) << endl;
			stu.push_back(temp);

			sort(stu.begin(), stu.end(), my_cmp);
			for (i = 0; i < stu.size(); i++) {
				if (i) {
					cout << ',';
				}
				cout << '(' << stu[i].id << ',' << stu[i].name << ',' << stu[i].sex << ',' << stu[i].age << ')';
			}
			cout << endl;
		}
		else if (m[0] == 'D') {
			ID = trans(m.substr(1, m.size() - 1));
			for (i = 0; i < stu.size(); i++) {
				if (stu[i].id == ID) {
					stu.erase(stu.begin() + i);
				}
			}
			sort(stu.begin(), stu.end(), my_cmp);
			for (i = 0; i < stu.size(); i++) {
				if (i) {
					cout << ',';
				}
				cout << '(' << stu[i].id << ',' << stu[i].name << ',' << stu[i].sex << ',' << stu[i].age << ')';
			}
			cout << endl;
		}
	}
	

	return 0;
}

根据一棵树的中序遍历与后序遍历构造二叉树在这里插入图片描述

中序遍历:先左子树,后根节点,再右子树
后序遍历:先左子树,后右子树,再根节点
在这里插入图片描述

#include "pch.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

struct TreeNode {
	char val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
	//解题主函数
	void m() {
		vector<char> in;
		vector<char> post;
		string inorder, postorder;
		int i = 0;
		TreeNode* root;

		cout << "输入(按后序,中序):";
		cin >> postorder >> inorder;
		for (i = 0; i < inorder.size(); i++) {
			in.push_back(inorder[i]);
		}
		for (i = 0; i < postorder.size(); i++) {
			post.push_back(postorder[i]);
		}

		root = buildTree(in, post);
		pre(root);
	}
	//先序遍历建立的二叉树
	void pre(TreeNode* root) {
		if (root == NULL)
			return;
		cout << root->val;
		pre(root->left);
		pre(root->right);
	}
	//建立二叉树
	TreeNode* buildTree(vector<char>& inorder, vector<char>& postorder) {
		return pre_order(0, inorder.size() - 1, 0, inorder.size() - 1, inorder, postorder);
	}
	//建立二叉树,递归
	TreeNode *pre_order(int leftin, int rightin, int leftpost, int rightpost, vector<char> &in, vector<char> &post) {
		int rootin = 0;
		int left = 0;

		if (leftin > rightin)
			return NULL;
		TreeNode *root = new TreeNode(post[rightpost]);
		rootin = leftin;
		while (rootin <= rightin && in[rootin] != post[rightpost])
			rootin++;
		left = rootin - leftin;
		root->left = pre_order(leftin, rootin - 1, leftpost, leftpost + left - 1, in, post);
		root->right = pre_order(rootin + 1, rightin, leftpost + left, rightpost - 1, in, post);
		return root;
	}
};

int main()
{
	Solution s;

	s.m();

	return 0;
}


#include "pch.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

string a, b;

void f(int ab, int ae, int bb, int be) {
	int i = 0;

	if (ab > ae)
		return;
	cout << a[ae];
	for (i = bb; i <= be && b[i] != a[ae]; i++);
	f(ab, ab + i - bb - 1, bb, i - 1);
	f(ab + i - bb, ae - 1, i + 1, be);
}

int main()
{
	cin >> a >> b;

	f(0, a.size() - 1, 0, b.size() - 1);

	return 0;
}


  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
北京理工大学的研究生考试是非常有竞争力的,被称为中国的MIT。其中,考研复试的C试题是技术类专业考生需要进行的一部分。以下是对北京理工考研复试C试题的回答。 北京理工大学考研复试C试题主要涉及技术类专业的知识和能力。试题内容通常会围绕专业领域的基础知识、实践能力和解决问题的能力。试题旨在考察考生的综合素养和专业能力是否与该专业要求相符。 在回答C试题时,首先要全面理解题目要求,明确题目的关键词和考察的知识点。接下来,需要找出问题的关键点,分析问题的本质,并提出解决问题的方法或策略。在回答问题时,要注意语言表达的准确性和逻辑性,尽量用简明扼要的语言阐述观点,清晰地展示自己的思路和解决问题的能力。 在准备C试题的过程中,考生应该通过认真学习专业知识,多做相关的实验和项目,提高自己的实践能力。同时,可以参加一些相关的讨论组织或科研项目,与其他同行交流,提高自己的解决问题的能力。此外,要经常关注专业领域的最新动态,了解前沿的研究成果和发展方向,做到知行合一。 总之,北京理工大学考研复试C试题对技术类专业考生来说是一个重要的考察环节。通过深入学习专业知识,提高实践能力和解决问题的能力,考生可以更好地回答C试题,展现自己的专业素养,从而在竞争激烈的考研环境中脱颖而出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值