2018年吉林大学软件学院软件工程学硕复试笔试题回忆

备注:笔试编程题目为手写,满分150分,时间为2小时。
今年为第二年招生,第一年复试题目见博客
从题目类型上看,大体有递归,穷举,数组和字符串这几种类型。比较容易归纳

1. “完数“判断(40分)

一个正整数的所有因子之和等于它本身,这样的数称为完数。如:1 + 2 + 3 = 6,则6为完数。输出100以内的所有完数。

参考代码:

#include	//包含所有库函数 
using namespace std;

int isWholeNUM(int n){	//使用函数进行判断 
	int sum = 0;
	for(int i = 1;i < n;++i){
		if(n%i == 0)
			sum += i;
	}
	if(sum == n) return 1;
	else return 0;
}

int main(){
	for(int i = 1;i < 100;++i){
		if(isWholeNUM(i))
			cout<<i<<endl;
	}
	return 0;
} 

2. 序列输出(40分)

假定序列满足:

  1. 第一位数是1;
  2. 第二位数是2;
  3. 奇数位为前两项之和,偶数项为前两项之差;

将100以内序列按递增排序并输出

参考代码:

#include
using namespace std;

int r_list(int n){
	if(n == 1) 
		return 1;
	else if(n == 2)
		return 2;
	else if(n%2 != 0)
		return r_list(n - 1) + r_list(n -2);
	else if(n%2 == 0)
		return r_list(n - 1) - r_list(n -2);
}

int main(){
	int num;
	vector<int> array;
	for(int i = 1;i <= 100;++i){
		num = r_list(i);
		array.push_back(num);
	}
	sort(array.begin(),array.end());
	for(int i = 0;i < array.size();++i)
		cout<<array[i]<<endl;
	return 0;
} 

3. 最短线段(40分)

平面上存在100个点,任意两点之间可以连接成一条线段。假设存在点 ( x 1 , y 1 ) (x1,y1) x1,y1,点 ( x 2 , y 2 ) (x2,y2) x2,y2,则两点之间的距离公式为
( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \sqrt{(x1-x2)^2+(y1-y2)^2} (x1x2)2+(y1y2)2
求所有线段中的最短线段

参考代码:

#include
using namespace std;

struct point{
	int x;
	int y;
} array[99];	//包含100个点,从0开始 

int main(){
	int length = 0,max = 0;
	for(int i = 0;i < 100;++i)			//输入100个点的坐标 
		cin>>array[i].x>>array[i].y;
	for(int i = 0;i < 100;++i){			//计算100个点之间所有组合的线段长度 
		for(int j = 0;j < 100;++j){
			length = (array[i].x - array[j].x)^2 + (array[i].y - array[j].y)^2;
			if(max < length)
				max = length;
		}
	} 
	cout<<sqrt(max);
	return 0;
}

4. 0串数目(30分)

输入一段序列,连续两个0及以上称为0串。假如为001000,其中0串的数目为2。输入以2为结束,问序列中是否存在两个或两个以上的0串

#include
using namespace std;

int main(){
	string num;
	int m = 0,n = 0;
//	while((cin>>num) != '2');	//题意要求应该是这样,当输入2时自动终止输入,但是报错 
	cin>>num;					//因此手工输入 
	for(int i = 0;i < num.length();++i){
		if(num[i] == '0')
			m++;
		else 
			m = 0;
		if(m >= 2 && num[i + 1] != '0')
			n++;	
	}
	if(n >= 2)
		cout<<"OK"<<endl;
	else
		cout<<"No"<<endl;
	return 0;
} 

你可能感兴趣的:(其他整理,--,个人)