21考研西安交大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 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;
}

在这里插入图片描述

三、机器人的复制

问题描述

虚拟机器人复制,第一天生产一个成熟机器人,成熟机器人每天可生产一个新机器人,新机器人 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;
}

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值