您的位置:首页 > 其它

2017年吉林大学软件学院学硕高级程序设计复试题回忆

2018-03-02 15:45 387 查看
吉林大学软件学院学硕从2017年开始招生,复试为高级程序语言设计。此题目为学姐回忆,特此转载记录,并添加个人测试代码,希望对大家有帮助!

一、 验证哥徳巴赫猜想

输入一个大于等于 6 的偶数,偶数等于两个素数之和。

参考代码:

#include<iostream>

using namespace std;

int isPrime(int n){ //判断是否是素数
int i;
if(n == 1)
return 1;
else{
for(i = 2;i < n;i++)
if(n%i == 0) return 0;
return 1;
}
}

int main(){
int num;
cin>>num;   //输入数
while((num%2 != 0)||(num < 6)){//判断数字是否满足要求
cout<<"Error! Please enter another num"<<endl;
cin>>num;
}
for(int<
4000
/span> i = 1;i < num;++i){
for(int j = 1;j < i;++j){
if(((i + j) == num) && isPrime(i) && (isPrime(j)))
cout<<i<<"+"<<j<<"="<<num<<endl;
}
}
return 0;
}


二、 求数列前100行之和

定义一个数列 k(n):

k
=
{
第一行 1 ,n=1
第二行 k(n- 1)×(- 2)+1 ,n 为偶数
第三行 k(n- 1)×(- 3)+1 ,n 为奇数
}


输出数列前 100 行之和。

参考代码:

#include<iostream>
using namespace std;

int k(int m){
int n;
if(m == 1){
return 1;
}
else if(m%2==0){
return (k(m-1)*(-2) + 1);
}
else if(m%2!=0)
return (k(m-1)*(-3) + 1);
}

int main(){
int sum = 0;    //数列之和
for(int i = 1;i <= 100;++i){    //计算数列前100项之和
sum += k(i);
}
cout<<"sum = "<<sum<<endl;
return 0;
}


三、 求数字序列平台长度

给出一个数字序列,数字序列的平台长度就是数列中数字重复了几次,求出该数列平台的最长长度。

(注意:不要丢掉负数这种情况)

示例代码:

#include<bits/stdc++.h> //因为复试手写代码,建议使用该头文件,防止漏掉
using namespace std;

int main(){
string num;
cin>>num;
int arrayA[10] = {0},arrayB[10] = {0};
for(int i = 0;i < num.length();++i){
if(num[i] -'0' > 0 && num[i] != '-')  //正数计数
arrayA[num[i] - '0']++;
if(num[i] == '-'){   //判断是否是负数
arrayB[abs(num[i + 1] - '0')]++;
i += 1;
}
}
int max = 0;    //寻找最大值,也可以使用库函数
for(int i = 0;i < 10;++i)
if(max < arrayA[i])
max = arrayA[i];
for(int i = 0;i < 10;++i)
if(max < arrayB[i])
max = arrayB[i];
cout <<"max is "<<max<<endl;
return 0;
}


四、 输出数列 A 的前 100 项

数列 A 的定义:

数 1 是数列中的数;

若 x 是数列中得数那么 2x,3x 也是数列中的数;

数列中无其他的数;

参考代码:

#include<iostream>
#include<set>
using namespace std;

int main(){
set<int> num;
num.insert(1);
set<int>::iterator it_begin = num.begin();
set<int>::iterator it_end   = num.end();

for(set<int>::iterator it = it_begin;num.size() < 100;++it){
//cout<<*it<<endl;
num.insert(2*(*it));
num.insert(3*(*it));
}
for(set<int>::iterator it = it_begin; it != it_end; it++){
cout<<*it<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: