赞
踩
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) 2p−1∗(2p−1)的形式,其中 p p p为素数,例如: 6 = 2 1 ∗ ( 2 2 − 1 ) 6=2^1*(2^2-1) 6=21∗(22−1)
给定一个正整数 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 天可变成成熟机器人,机器人个数和天数的关系如下:
天数 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
机器人数 | 1 | 2 | 3 | 4 | 6 | 9 |
第 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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。