十四届程序C组试题A #includeint 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组试题B #include#include #include #include // 时间字符串解析为结构体 tm void parseTime(char* timeString, struct tm* timeStruct) { sscanf(timeString, "%d-%d-%d %d:%d:%d", &timeStruct->tm_year, &timeStruct->tm_mon, &timeStruct->tm_mday, &timeStruct->tm_hour, &timeStruct->tm_min, &timeStruct->tm_sec); // tm_year表示的是自1900年以来的年数,需要减去1900 timeStruct->tm_year -= 1900; // tm_mon表示的是0-11的月份,需要减去1 timeStruct->tm_mon -= 1; } // 每一对相邻的上下班打卡之间的时间差 int calculateTimeDifference(char* time1, char* time2) { struct tm start, end; // 解析时间字符串为结构体 tm parseTime(time1, &start); parseTime(time2, &end); // 使用 mktime 将 tm 结构体转换为时间戳 time_t startTime = mktime(&start); time_t endTime = mktime(&end); // 计算时间差 return difftime(endTime, startTime); } int main() { // 打卡记录数组 char* punchRecords[] = { "2022-01-01 07:58:02", "2022-01-01 12:00:05", "2022-01-01 16:01:35", "2022-01-02 00:20:05" }; int numRecords = sizeof(punchRecords) / sizeof(punchRecords[0]); // 按照时间顺序对打卡记录进行排序 for (int i = 0; i < numRecords - 1; i++) { for (int j = 0; j < numRecords - i - 1; j++) { if (strcmp(punchRecords[j], punchRecords[j + 1]) > 0) { // 交换记录 char* temp = punchRecords[j]; punchRecords[j] = punchRecords[j + 1]; punchRecords[j + 1] = temp; } } } // 计算总工作时长 int totalWorkDuration = 0; for (int i = 0; i < numRecords - 1; i += 2) { totalWorkDuration += calculateTimeDifference(punchRecords[i], punchRecords[i + 1]); } // 输出总工作时长 printf("小蓝在2022年度的总工作时长是%d秒。\n", totalWorkDuration); return 0; }
十四届程序C组试题C #includeint 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; }
#includeint 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; }
#include#include // 函数:计算最小翻转次数 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; }
#include#include #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; }
上一篇:C语言实战系列一:经典贪食蛇