第1题:字符统计
给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。
输入
输入包含一行,一个字符串,长度不超过1000。
输出
输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。
样例输入
abbccc
样例输出
c 3
下面是一个使用C语言编写的字符统计问题的程序的示例代码:
#include <stdio.h>
#include <string.h>int main() {char str[1001];scanf("%s", str);int count[26] = {0}; // 用于统计每个字符出现的次数,下标0代表字符'a',下标1代表字符'b',以此类推int len = strlen(str);for (int i = 0; i < len; i++) {count[str[i] - 'a']++; // 统计字符出现的次数}char maxChar;int maxCount = 0;for (int i = 0; i < 26; i++) {if (count[i] > maxCount) {maxCount = count[i];maxChar = i + 'a';}}printf("%c %d\n", maxChar, maxCount);return 0;
}
在上述代码中,我们首先定义了一个字符数组str
来保存输入的字符串。
然后,我们定义一个整数数组count
,用于统计每个字符出现的次数。数组的下标从0到25分别对应字符’a’到’z’。
接下来,我们使用strlen
函数获取输入字符串的长度,然后使用一个循环遍历字符串的每个字符。通过将字符减去字符’a’的ASCII码值,将其映射到count
数组的正确下标上,并将对应下标的元素加1,以统计字符出现的次数。
完成字符统计后,我们定义变量maxChar
和maxCount
,分别用于保存出现次数最多的字符和该字符出现的次数。初始时,将maxCount
设置为0。
然后,我们使用另一个循环遍历count
数组,找到出现次数最多的字符。如果当前字符出现的次数大于maxCount
,则更新maxCount
和maxChar
的值。
最后,我们使用printf
函数输出maxChar
和maxCount
的值,并在中间加上一个空格。
你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。
第2题:图像处理
给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1.四周最外侧的像素点灰度值不变;
2.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
时间限制:1000
内存限制:65536
输入
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。 接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。
输出
n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
样例输入
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100
样例输出
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100
下面是一个使用C语言编写的图像模糊处理问题的程序的示例代码:
#include <stdio.h>int main() {int n, m;scanf("%d %d", &n, &m);int image[n][m];// 读取图像像素值for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {scanf("%d", &image[i][j]);}}int blurredImage[n][m];// 模糊化处理for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (i == 0 || i == n - 1 || j == 0 || j == m - 1) {// 四周最外侧的像素点保持不变blurredImage[i][j] = image[i][j];} else {// 中间像素点的灰度值为周围五个像素点的平均值blurredImage[i][j] = (image[i][j] + image[i - 1][j] + image[i + 1][j] + image[i][j - 1] + image[i][j + 1]) / 5;}}}// 输出模糊处理后的图像for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {printf("%d", blurredImage[i][j]);if (j < m - 1) {printf(" ");}}printf("\n");}return 0;
}
在上述代码中,我们首先使用scanf
函数读取图像的行数n
和列数m
。
然后,我们定义一个二维数组image
来保存图像的像素值。
接下来,我们使用两个嵌套的循环读取输入的像素值,并将其保存到image
数组中。
然后,我们定义另一个二维数组blurredImage
来保存模糊处理后的图像像素值。
接下来,我们使用两个嵌套的循环遍历图像的每个像素点。如果当前像素点是图像的四周最外侧的像素点,则将其灰度值保持不变;否则,将当前像素点及其上下左右相邻的四个像素点的灰度值相加,然后除以5取整,得到模糊处理后的新灰度值。
完成模糊处理后,我们使用两个嵌套的循环遍历blurredImage
数组,并使用printf
函数输出模糊处理后的图像像素值。在每行的输出中,相邻的两个像素值之间用一个空格隔开,每行结束后输出一个换行符。
你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。
第3题:替换单词
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
时间限制:1000
内存限制:65536
输入
输入包括3行, 第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 <= 100);
第3行是a将被替换的单词b(长度 <= 100).
s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
样例输入
You want someone to help you
You
I
样例输出
I want someone to help you
下面是一个使用C语言编写的替换单词问题的程序的示例代码:
#include <stdio.h>
#include <string.h>void replaceWord(char *str, const char *oldWord, const char *newWord) {char *pos, temp[100];int index = 0;int oldWordLen = strlen(oldWord);// 在字符串中找到要替换的单词,并将其替换为新单词while ((pos = strstr(str, oldWord)) != NULL) {strcpy(temp, str);index = pos - str;str[index] = '\0';strcat(str, newWord);strcat(str, temp + index + oldWordLen);}
}int main() {char str[1000];char oldWord[100], newWord[100];// 读取输入的字符串、待替换的单词和替换后的单词fgets(str, sizeof(str), stdin);fgets(oldWord, sizeof(oldWord), stdin);fgets(newWord, sizeof(newWord), stdin);// 去除字符串中的换行符str[strcspn(str, "\n")] = '\0';oldWord[strcspn(oldWord, "\n")] = '\0';newWord[strcspn(newWord, "\n")] = '\0';// 替换单词replaceWord(str, oldWord, newWord);// 输出替换后的字符串printf("%s\n", str);return 0;
}
在上述代码中,我们首先定义了一个replaceWord
函数,用于在字符串中替换指定的单词。
在replaceWord
函数中,我们使用strstr
函数在字符串中查找要替换的单词的位置。如果找到了要替换的单词,我们将字符串切割成三部分:替换位置之前的部分、替换位置的单词、替换位置之后的部分。然后,我们使用strcpy
函数将字符串的前半部分复制到临时数组temp
中,使用strcat
函数将新单词和剩余部分拼接到字符串中,以完成替换。
在main
函数中,我们首先定义了字符数组str
、oldWord
和newWord
,分别用于保存输入的字符串、待替换的单词和替换后的单词。
然后,我们使用fgets
函数逐行读取输入的字符串、待替换的单词和替换后的单词。注意,fgets
函数会读取换行符,因此我们需要使用strcspn
函数将换行符替换为字符串结束符\0
。
接下来,我们调用replaceWord
函数替换字符串中的单词。
最后,我们使用printf
函数输出替换后的字符串。
你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。
第4题:偶数降序输出
给定一个长度为N (不大于500) 的正整数序列,请将其中的所有偶数取出,并按降序输出。
输入描述:
共两行;第一行为N;第二行为N个正数,其间用空格间隔
输出描述:
降序输出的偶数序列,数与数之间用空格间隔
数据保证至少有一个偶数
样例输入:
10
1 3 2 6 5 4 9 8 7 10
样例输出:
10 8 6 4 2
下面是一个使用C语言编写的偶数降序输出问题的程序的示例代码:
#include <stdio.h>void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] < arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main() {int N;scanf("%d", &N);int sequence[N];int evenCount = 0;// 读取序列并筛选出偶数for (int i = 0; i < N; i++) {scanf("%d", &sequence[i]);if (sequence[i] % 2 == 0) {evenCount++;}}int evenNumbers[evenCount];int index = 0;// 将偶数存储到新数组evenNumbers中for (int i = 0; i < N; i++) {if (sequence[i] % 2 == 0) {evenNumbers[index] = sequence[i];index++;}}// 使用冒泡排序对偶数进行降序排序bubbleSort(evenNumbers, evenCount);// 输出降序排列的偶数序列for (int i = 0; i < evenCount; i++) {printf("%d", evenNumbers[i]);if (i < evenCount - 1) {printf(" ");}}printf("\n");return 0;
}
在上述代码中,我们首先使用scanf
函数读取输入的整数N
,表示序列的长度。
然后,我们定义一个数组sequence
来保存输入的正整数序列,并定义一个变量evenCount
来记录偶数的个数。
接下来,我们使用一个循环读取输入的正整数序列,并在读取的同时判断每个数是否为偶数,如果是偶数,则将evenCount
加1。
然后,我们定义一个新的数组evenNumbers
,其大小为evenCount
,用于存储筛选出的偶数。
接着,我们使用另一个循环将偶数存储到evenNumbers
数组中。
之后,我们使用冒泡排序算法对evenNumbers
数组进行降序排序。
最后,我们使用一个循环输出降序排列的偶数序列,每个数之间用空格隔开。
你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。
第5题:满足条件的数的累加2
现有n个整数,将其中个位数为k的数进行累加求和
输入
第一行一个整数n。第二行n个非负整数,以空格分割,每个数不大于100000。第三行一个整数k。
输出
输出满足题目要求的累加和
样例输入
10
2 5 7 17 11 18 4 27 1 7
7
样例输出
58
下面是一个使用C语言编写的满足条件的数的累加求和问题的程序的示例代码:
#include <stdio.h>int main() {int n;scanf("%d", &n);int numbers[n];int k;scanf("%d", &k);// 读取n个非负整数for (int i = 0; i < n; i++) {scanf("%d", &numbers[i]);}int sum = 0;// 对满足个位数为k的数进行累加求和for (int i = 0; i < n; i++) {if (numbers[i] % 10 == k) {sum += numbers[i];}}// 输出累加和printf("%d\n", sum);return 0;
}
在上述代码中,我们首先使用scanf
函数读取输入的整数n
,表示非负整数的个数。
然后,我们定义一个数组numbers
来保存输入的非负整数序列。
接下来,我们使用一个循环读取输入的非负整数序列,并将每个数存储到numbers
数组中。
接着,我们使用scanf
函数读取输入的整数k
,表示要求个位数为k
的数。
然后,我们定义一个变量sum
并初始化为0,用于存储满足条件的数的累加和。
之后,我们使用一个循环遍历numbers
数组,并判断每个数的个位数是否为k
,如果满足条件,则将该数累加到sum
中。
最后,我们使用printf
函数输出累加和sum
。
你可以根据需要使用上述示例代码,并根据题目要求进行适当的修改。记得在编译和运行代码之前,确保你的编译环境已经配置好,并且包含了必要的头文件。