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

一、 验证哥徳巴赫猜想

输入一个大于等于 6 的偶数,偶数等于两个素数之和。
参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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 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):

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

输出数列前 100 行之和。
参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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;
}

三、 求数字序列平台长度

给出一个数字序列,数字序列的平台长度就是数列中数字重复了几次,求出该数列平台的最长长度。 (注意:不要丢掉负数这种情况)
示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#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. 数 1 是数列中的数;
  2. 若 x 是数列中得数那么 2x,3x 也是数列中的数;
  3. 数列中无其他的数;
    参考代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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;
}