第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
。
你可以根據需要使用上述示例代碼,并根據題目要求進行適當的修改。記得在編譯和運行代碼之前,確保你的編譯環境已經配置好,并且包含了必要的頭文件。