当前位置:   article > 正文

21考研西安交大915编程题_西安交大915真题

西安交大915真题

前言

21年编程题相对来说比较简单,拿满分不难,22年编程题难度略有提升,主要区别在于最后一道编程题,21年是一道简单递推,22年最后一道用到了dfs回溯实现指数型子集枚举或者迭代(二进制优化)实现指数型子集枚举

一、马鞍点

题目链接

#include <iostream>

using namespace std;

const int N = 15;
int g[N][N], n, m;

bool is_maan(int a, int b)
{
    int x = a, y = b;
    for (int i = 1; i <= n; i ++)
        if (g[i][b] < g[a][b])    // 在该列最小
            return false;
    for (int j = 1; j <= m; j ++)
        if (g[a][j] > g[a][b])    // 在该行最大
            return false;
    return true;
}

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++)
            scanf("%d", &g[i][j]);
            
    bool flag = false;
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++)
            if (is_maan(i, j))
            {
                printf("%d %d %d\n", i, j, g[i][j]);
                flag = true;
            }
    
    if (!flag) puts("NO");
    
    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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

在这里插入图片描述

二、完美数

问题描述

完美数的定义——如果一个大于 1 1 1 的正整数的所有因子之和等于它的本身,则称这个数是完美数,比如 6 6 6 28 28 28 都是完数: 6 = 1 + 2 + 3 6=1+2+3 6=1+2+3 28 = 1 + 2 + 4 + 7 + 14 28=1+2+4+7+14 28=1+2+4+7+14。同时完全数也满足 2 p − 1 ∗ ( 2 p − 1 ) 2^{p-1}*(2^p-1) 2p1(2p1)的形式,其中 p p p为素数,例如: 6 = 2 1 ∗ ( 2 2 − 1 ) 6=2^1*(2^2-1) 6=21(221)

输入说明

给定一个正整数 n n n

输出说明

输出两行,如果 n n n 是完美数,返回 t r u e true true,否则返回 f a l s e false false,并在第二行按照从小到大的顺输出 10000 10000 10000 内的完全数(以空格分隔)。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

bool is_perfect(int n)
{
    int res = 0;
    for (int i = 1; i < n; i ++)
        if (n % i == 0)
            res += i;
    return res == n;
}

bool is_prime(int x)  // 判定质数
{
    if (x < 2) return false;
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0)
            return false;
    return true;
}

int main()
{
    int n;
    cin >> n;
    if (is_perfect(n)) puts("true");
    else puts("false");
    
    for (int i = 1; i <= 10000; i ++)
        if (is_prime(i)) 
            cout << pow(2, i - 1) * (pow(2, i) - 1) << 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
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

在这里插入图片描述

三、机器人的复制

问题描述

虚拟机器人复制,第一天生产一个成熟机器人,成熟机器人每天可生产一个新机器人,新机器人 3 3 3 天可变成成熟机器人,机器人个数和天数的关系如下:

天数123456
机器人数123469

输入描述

n n n 天( n < = 100 n<=100 n<=100 的自然数)

输出描述

n n n 天时机器人总数

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;
int n, f[N];    // f[i]表示第i天机器人的个数

int main()
{
    cin >> n;
    
    // 前三天只有第一天的成熟机器人在繁殖
    for (int i = 0; i <= 3; i ++)
        f[i] = i;
        
    // 第i天机器人的个数 = 前一天所有机器人的个数 + 三天前所有机器人的个数(即成熟机器人的个数)
    // 即f[i] = f[i -1] + f[i - 3];
    for (int i = 4; i <= 100; i ++)
        f[i] = f[i -1] + f[i - 3];
    cout << f[n] << 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
  • 26

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号