十四届程序C组试题A
#include <stdio.h>
int main()
{
long long sum = 0;
int n = 20230408;
int i = 0;
// 累加从1到n的所有整数
for (i = 1; i <= n; i++)
{
sum += i;
}
// 输出结果
printf("%lld\n", sum);
return 0;
}
十四届程序C组试题C
#include <stdio.h>
int main() {
int n; // 事件数量
scanf("%d", &n);
int A[n], B[n], C[n]; // 存储每个事件中的A、B、C值
int maxEvents = -1; // 最多发生的事件数量
int X = 0, Y = 0, Z = 0; // 初始士兵数量
for (int i = 0; i < n; ++i) {
scanf("%d %d %d", &A[i], &B[i], &C[i]);
// 计算每个国家的士兵数量
X += A[i];
Y += B[i];
Z += C[i];
// 判断是否有国家获胜
if ((X > Y + Z) || (Y > X + Z) || (Z > X + Y)) {
// 更新最多发生的事件数量
maxEvents = i + 1;
}
}
printf("%d\n", maxEvents);
return 0;
}
cpp复制代码
#include <stdio.h>
int maximize_substrings(char* s)
{
int count = 0;
int i, n;
// 遍历字符串,从第二个字符开始
for (i = 1; s[i] != '\0'; ++i)
{
// 如果当前位置是'?',则尽量使其与前一个字符不同
if (s[i] == '?') {
s[i] = (s[i - 1] == '1') ? '0' : '1';
}
// 计算互不重叠的00和11子串的个数
if (s[i] == s[i - 1])
{
count += 1;
}
}
return count;
}
int main()
{
char input_str[] = "1?0?1";
int result = maximize_substrings(input_str);
printf("互不重叠的00和11子串个数:%d\n", result);
return 0;
}
cpp复制代码
#include <stdio.h>
#include <string.h>
// 函数:计算最小翻转次数
int min_flips_to_match(char S[], char T[])
{
int n = strlen(S);
int flips = 0;
// 从第二个位置到倒数第二个位置进行遍历
for (int i = 1; i < n - 1; ++i)
{
// 如果当前位置的字符与目标串不同
if (S[i] != T[i])
{
// 进行翻转操作
flips++;
S[i] = T[i];
S[i + 1] = (S[i + 1] == '0') ? '1' : '0';
S[i + 2] = (S[i + 2] == '0') ? '1' : '0';
}
}
return flips;
}
int main()
{
// 示例输入
char S[] = "01010";
char T[] = "00000";
// 计算最小翻转次数
int result = min_flips_to_match(S, T);
// 输出结果
printf("Minimum flips required: %d\n", result);
return 0;
}
cpp复制代码
#include <stdio.h>
#include <stdlib.h>
#define MOD 998244353
// 函数:计算矩阵子矩阵价值的和
int matrixSubmatrixSum(int n, int m, int matrix[n][m])
{
// 预处理,计算每个位置的最大值和最小值
int maxVal[n][m];
int minVal[n][m];
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
if (i > 0)
{
maxVal[i][j] = (maxVal[i][j] > maxVal[i - 1][j]) ? maxVal[i][j] : maxVal[i - 1][j];
minVal[i][j] = (minVal[i][j] < minVal[i - 1][j]) ? minVal[i][j] : minVal[i - 1][j];
}
if (j > 0)
{
maxVal[i][j] = (maxVal[i][j] > maxVal[i][j - 1]) ? maxVal[i][j] : maxVal[i][j - 1];
minVal[i][j] = (minVal[i][j] < minVal[i][j - 1]) ? minVal[i][j] : minVal[i][j - 1];
}
maxVal[i][j] = (maxVal[i][j] > matrix[i][j]) ? maxVal[i][j] : matrix[i][j];
minVal[i][j] = (minVal[i][j] < matrix[i][j]) ? minVal[i][j] : matrix[i][j];
}
}
// 计算答案
int result = 0;
for (int a = 1; a <= n; ++a)
{
for (int b = 1; b <= m; ++b)
{
for (int i = 0; i + a - 1 < n; ++i)
{
for (int j = 0; j + b - 1 < m; ++j)
{
int maxInSubmatrix = maxVal[i + a - 1][j + b - 1];
int minInSubmatrix = minVal[i + a - 1][j + b - 1];
result = (result + ((long long)maxInSubmatrix * minInSubmatrix) % MOD) % MOD;
}
}
}
}
return result;
}
int main()
{
// 示例输入
int n = 3, m = 3;
int matrix[3][3] ={{1, 2, 3},{4, 5, 6},{7, 8, 9}};
// 计算答案
int result = matrixSubmatrixSum(n, m, matrix);
// 输出结果
printf("Sum of submatrix values: %d\n", result);
return 0;
}