- 高瑞 的博客
CSP-J真题2024
- @ 2025-8-9 14:15:18
T1
这题是真的不会,我以为int是-2^31+1~2^31-1,不过这次错了下次就会了
32 位 int 类型的存储范围是(C)
A,-2,147,483,647~2,147,483,647
B,-2,147,483,647~2,147,483,648
C,-2,147,483,648~2,147,483,647
D,-2,147,483,648~2,147,483,648
阅读程序1
#include <iostream>
using namespacestd;
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int countPrimes(int n) {
int count = 0;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
count++;
}
}
return count;
}
int sumPrimes(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
sum += i;
}
}
return sum;
}
int main() {
int x;
cin >> x;
cout << countPrimes(x) << " " << sumPrimes(x) << endl;
return 0;
}
输入n,输出n以内质数个数,n以内所有质数的和
阅读程序2
#include <iostream>
#include <vector>
using namespacestd;
int compute(vector<int> &cost) {
int n = cost.size();
vector<int> dp(n + 1, 0);
dp[1] = cost[0];
for (int i = 2; i <= n; i++) {
dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i - 1];
}
return min(dp[n], dp[n - 1]);
}
int main() {
int n;
cin >> n;
vector<int> cost(n);
for (inti = 0; i < n; i++) {
cin >> cost[i];
}
cout << compute(cost) << endl;
return 0;
}
这段代码实现了一个动态规划算法,用于解决最小花费爬楼梯问题,这是一个经典的动态规划问题,计算爬楼梯的最小花费,dp数组存储到达每个台阶的最小累计花费,递推关系:dp[i] = min(dp[i-1], dp[i-2]) + cost[i-1],最后返回最后两个台阶中的较小值
阅读程序3
#include <iostream>
#include <cmath>
using namespacestd;
int customFunction(int a, int b) {
if (b == 0) {
return a;
}
return a + customFunction(a , b - 1);
}
int main() {
int x, y;
cin >> x >> y;
int result = customFunction(x, y);
cout << pow(result, 2) << endl;
return 0;
}
这段代码用递归函数来计算两个整数的乘积,然后输出该乘积的平方值
完善程序2
#include <iostream>
#include <vector>
using namespace std;
void move(char src, char tgt)
{
cout << "从柱子" << src << "挪到柱子" << tgt << endl;
}
void dfs(int i, char src, char tmp, char tgt)
{
if(i == 1)
{
move(src, tgt);
return;
}
dfs(i - 1, src, tgt, tmp);
move(src, tgt);
dfs(i - 1, tmp, src, tgt);
}
int main()
{
int n;
cin >> n;
dfs(n, 'A', 'B', 'C');
return 0;
}
这段代码是经典的汉诺塔问题:
给定三根柱子,分别标记为 A 、B 和C。初始状态下,柱子 A 上有若干个 圆盘,这些圆盘从上到下按从小到大的顺序排列。任务是将这些圆盘全部移到柱子 C上,且 必须保持原有顺序不变。在移动过程中,需要遵守以下规则:
1.只能从一根柱子的顶部取出圆盘,并将其放入另一根柱子的顶部。
2.每次只能移动一个圆盘
3.小圆盘必须始终在大圆盘之上。