2017年北邮计算机院复试上机题目

数学 | 2017.计算机院.Problem A.Special数

题目来源:分享一下北邮计算机院2017上机回忆版

题目描述
设一个正整数既是半方数又是立方数时,称其为Special 数。输入包含多组测试数据,第一行输入测试数据的组数,按若在后续每行输入n (n<=109) 的时候,请输出1 到n 中包含的所有Special 数的个数。
Sample Inputs

2
1
64

Sample Outputs

1
2

思路
思路一:.对于每一个立方数 再判断次数是不是平方数 双循环嵌套 复杂度O(n^2)
思路二:设一个大数组 标记所有平方数 在标记一次所有立方数 做交集 得到平方数 进一步计数每个位置的平方数个数 时间复杂度是O(n);
思路三:最简单 既是平方数 又是立方数 那么这个数是 某个数的6次方

代码

#include 
#include 
using namespace std;

const int maxn = 10010;

int spe[50] = {0};
int cnt = 0;
void cal_special()
{
    int spe_num;
    int i = 1;
    while(1)
    {
        spe_num = (int)pow( double(i), 6.0 );
        if( spe_num >= maxn )
            break;
        spe[cnt++] = spe_num;
        i++;
    }
}

思路二代码

#include 
using namespace std;
const int maxn = 10010;
bool isspecial[maxn] = {false};
bool square[maxn] = {false};
bool cube[maxn] = {false};
int spe_count[maxn] = {0};
void cal_special()
{
    for( int i = 1; i*i < maxn; i++ )
        square[i*i] = true;
    for( int i = 1; i*i*i < maxn; i++ )
        cube[i*i*i] = true;
    for( int i = 1; i < maxn; i++ )
        if( square[i] && cube[i] )
           isspecial[i] = true;
    spe_count[1] = 1;
    for( int i = 2; i < maxn; i++ )
        if( isspecial[i] )
            spe_count[i] = spe_count[i-1]+1;
        else
            spe_count[i] = spe_count[i-1];
}
int main()
{
    cal_special();

    int T;
    cin >> T;
    while( T-- )
    {
        int n;
        cin >> n;
        cout << spe_count[n] << endl;
    }
    return 0;
}

模拟 | 2017.计算机院.Problem B.字符串操作

题目描述
给定一个长度为n (n>=1)的字符串序列,标记为[qa.a,],在字符串序列上定义以下5种操作类型,分别标号为1,2,3,4,5,同时l和r分别表示 a l a_l al a r a_r ar 的下标,len 表示需要操作的子序列长度。操作定义如下:
1 l r — 将区间[ a l a_l al, a r a_r ar]内的元素逆序。
2 l r len — 分别从 a l a_l al a r a_r ar元素开始,互换len个元素
3 l r x — 将区间[ a l a_l al, a r a_r ar] 内的元素统一替换成x
4 l r — 将区间[ a l a_l al, a r a_r ar] 内的元素按升序排序
5 l r — 计算区间[ a l a_l al, a r a_r ar] 内的元素和,并输出元素和
输入格式
第一行输入n和m,表示字符串序列长度n和操作命令数m,
第二行输入n个整数构成字符串序列,在第三行及之后各行(共计m行)中,每行输入一个操作类型命令。。
输出格式
输出每次的第5种操作类型的结果
Example
Inputs

9 8
1 2 3 4 5 6 7 8 9
1 4 8
5 7 9
2 2 5 3
5 5 9

Outputs

18
26
20
40

代码

#include 
#include 

using namespace std;
const int maxn = 100;
int num[maxn];

bool cmp( int a, int b )
{
    return a > b;
}

int main()
{
    int n, m;
    cin >> n >> m;
    for( int i = 0; i < n; i++ )
        cin >> num[i];
    int op, l, r, arg, sum;
    int i;
    while( m-- )
    {
        cin >> op >> l >> r;
        l--;r--;
        switch( op )
        {
            case 1:
                reverse( num+l, num+r+1 );
                break;
            case 2:
                cin >> arg;
                while( arg-- )
                    swap( num[l+arg], num[r+arg] );
                break;
            case 3:
                cin >> arg;
                for( i = l; i <= r; i++ )
                    num[i] = arg;
                break;
            case 4:
                sort( num+l, num+r+1 );
                break;
            case 5:
                sum = 0;
                for( i = l; i <= r; i++ )
                    sum += num[i];
                cout << sum << endl;
                break;
            default:
                break;
        }
    }
    return 0;
}

模板 | 树 | 2017.计算机院.Problem C.二叉树

题目描述
输入二叉树的前序遍历和中序遍历结果,输出二叉树的后序遍历结果
输入格式
第一行为二叉树先序遍历结果
第二行为二叉树中序遍历结果。
输出格式
二叉树后序遍历结果。
Example
Inputs

426315
623415

Outputs

632514

代码

#include 
#include 
using namespace std;
const int maxn = 100;
string pre;
string in;

bool firstCase = true;
void toPost( int prel, int prer, int inl, int inr )
{
    int i;
    for( i = inl; i <= inr && in[i] != pre[prel]; i++ );
    int llen = i - inl;
    int rlen = inr - i;
    if( llen )
        toPost( prel+1, prel+llen, inl, i-1 );
    if( rlen )
        toPost( prer-rlen+1, prer, i+1, inr );
    if( firstCase )
        firstCase = false;
    else
        cout << " ";
    cout << pre[prel];
}

int main()
{
    cin >> pre;
    cin >> in;
    int len = pre.size();
    toPost( 0, len-1, 0, len-1 );
    return 0;
}

搜索 | 2017.计算机院.Problem D.统计’s’和 '8’的个数

题目描述
给定一个由数字0或1组成的矩阵,矩阵规模n*m,统计其中的’s’和 ‘8’的个数。注意,'s’和 ‘8’可以没有,也可以分别有多个,并且’s’和‘8’之间用 0分开。

输入格式
第一行输入测试组数。
第二行为第一组矩阵规模n m
接着n行为矩阵数据。
接着为第二组数据…依次类推+

输出格式
输出每组测试数据中’s’和‘8’的个数。

Example
Inputs

2
30 12
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
2 20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0

Outputs

1 1
0 0

你可能感兴趣的:(北邮研究生复试上机)