2018年吉林大学软件学院软件工程学硕复试笔试题回忆
发布时间
阅读量:
阅读量
备注:笔试编程题目为手写,满分150分,时间为2小时。
今年为第二年招生,第一年复试题目见博客
从题目类型上看,大体有递归,穷举,数组和字符串这几种类型。比较容易归纳
1. “完数“判断(40分)
一个正整数的所有因子之和等于它本身,这样的数称为完数。如:1 + 2 + 3 = 6,则6为完数。输出100以内的所有完数。
参考代码:
#include<bits/stdc++.h> //包含所有库函数
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;
- 第二位数是2;
- 奇数位为前两项之和,偶数项为前两项之差;
将100以内序列按递增排序 并输出
参考代码:
#include<bits/stdc++.h>
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个点,任意两点之间可以连接成一条线段。假设存在点(x1,y1),点(x2,y2),则两点之间的距离公式为
\sqrt{(x1-x2)^2+(y1-y2)^2}
求所有线段中的最短线段
参考代码:
#include<bits/stdc++.h>
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<bits/stdc++.h>
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;
}
全部评论 (0)
还没有任何评论哟~
