第1題:數字放大
給定一個整數序列以及放大倍數x,將序列中每個整數放大x倍后輸出。
時間限制:1000
內存限制:65536
輸入
包含三行: 第一行為N,表示整數序列的長度(N ≤ 100); 第二行為N個整數(不超過整型范圍),整數之間以一個空格分開; 第三行包含一個整數(不超過整型范圍),為指定的整數x。
輸出
N個整數,為原序列放大之后的序列,整數之間以一個空格分開。
樣例輸入
3
1 5 7
2
樣例輸出
2 10 14
提示
注意答案的數據范圍
以下是使用C語言編寫的解決方案,用于將給定整數序列中的每個整數放大x倍后輸出:
#include <stdio.h>int main() {int N;scanf("%d", &N);int sequence[N];for (int i = 0; i < N; i++) {scanf("%d", &sequence[i]);}int x;scanf("%d", &x);for (int i = 0; i < N; i++) {printf("%d ", sequence[i] * x);}printf("\n");return 0;
}
在此解決方案中,我們首先定義一個變量N
,用于存儲整數序列的長度。
然后,我們使用scanf
函數讀取N
的值。
接下來,我們定義一個整數數組sequence
,大小為N
,用于存儲整數序列。
使用循環結構,我們遍歷整數序列,并使用scanf
函數將每個整數讀取到sequence
數組中。
然后,我們定義一個變量x
,用于存儲放大倍數。
再次使用scanf
函數,我們讀取x
的值。
接下來,使用循環結構,我們遍歷整數序列,并將每個整數乘以x
,然后使用printf
函數輸出結果。
最后,我們使用printf
函數輸出換行符,以便將結果打印在一行。
編譯并運行上述代碼,根據給定的輸入示例,將會輸出"2 10 14",表示原序列放大后的序列。
第2題:統一文件名
小A在命名文件的時候經常不注意大小寫,格式比較混亂。現要求你寫一個程序將目錄下的文件統一規范的格式,即文件名的第一個字符如果是字母要大寫,其他字母小寫。如將Test、test整理成Test。
時間限制:1000
內存限制:65536
輸入
第一行一個數字n,表示有n個文件名要統一,n不超過100。 接下來n行,每行一個單詞,長度不超過20,表示文件的名字。文件名由字母、數字和-組成。
輸出
n行,每行一個單詞,對應統一后的文件名。
樣例輸入
4
Test
data
2-TEST
problem-6
樣例輸出
Test
Data
2-test
Problem-6
以下是使用C語言編寫的解決方案,用于將給定的文件名統一規范化格式:
#include <stdio.h>
#include <ctype.h>void normalizeFilename(char *filename) {int length = strlen(filename);// 將第一個字符轉換為大寫if (isalpha(filename[0])) {filename[0] = toupper(filename[0]);}// 將其余字符轉換為小寫for (int i = 1; i < length; i++) {filename[i] = tolower(filename[i]);}
}int main() {int n;scanf("%d", &n);char filenames[n][21];for (int i = 0; i < n; i++) {scanf("%s", filenames[i]);normalizeFilename(filenames[i]);}for (int i = 0; i < n; i++) {printf("%s\n", filenames[i]);}return 0;
}
在此解決方案中,我們首先定義一個函數normalizeFilename
,用于將給定的文件名規范化為統一格式。
在函數中,我們首先獲取文件名的長度。
然后,我們將文件名的第一個字符轉換為大寫,使用isalpha
函數檢查字符是否為字母,使用toupper
函數將字符轉換為大寫。
接下來,我們使用循環結構,將文件名的其余字符轉換為小寫,使用tolower
函數將字符轉換為小寫。
在main
函數中,我們首先定義一個變量n
,用于存儲文件名的個數。
然后,使用scanf
函數讀取n
的值。
接下來,我們定義一個二維字符數組filenames
,大小為n
行,每行最多可以存儲20個字符的文件名。
使用循環結構,我們遍歷每個文件名,并使用scanf
函數將文件名讀取到相應的行中。
接著,我們調用normalizeFilename
函數,將每個文件名規范化為統一格式。
最后,使用循環結構,我們遍歷每個文件名,并使用printf
函數輸出結果。每個文件名占一行。
編譯并運行上述代碼,根據給定的輸入示例,將會輸出統一規范化后的文件名。
第3題:內部元素之和
輸入一個整數矩陣,計算位于矩陣內部的元素之和。所謂矩陣內部的元素,不在第一行和最后一行的元素以及第一列和最后一列的元素。
時間限制:1000
內存限制:65536
輸入
第一行分別為矩陣的行數m和列數n(m < 100,n < 100),兩者之間以一個空格分開。 接下來輸入的m行數據中,每行包含n個整數(每個數大于等于0,小于1000),整數之間以一個空格分開。
輸出
輸出對應矩陣的內部元素和
樣例輸入
3 3
3 4 1
3 7 1
2 0 1
樣例輸出
7
以下是使用C語言編寫的解決方案,用于計算位于矩陣內部的元素之和:
#include <stdio.h>int main() {int m, n;scanf("%d %d", &m, &n);int matrix[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {scanf("%d", &matrix[i][j]);}}int sum = 0;for (int i = 1; i < m - 1; i++) {for (int j = 1; j < n - 1; j++) {sum += matrix[i][j];}}printf("%d\n", sum);return 0;
}
在此解決方案中,我們首先定義兩個變量m
和n
,分別表示矩陣的行數和列數。
然后,使用scanf
函數讀取m
和n
的值。
接下來,我們定義一個二維整數數組matrix
,大小為m
行n
列,用于存儲矩陣。
使用兩個嵌套的循環結構,我們遍歷矩陣的每個元素,使用scanf
函數將每個整數讀取到相應的位置。
然后,我們定義一個變量sum
,用于存儲內部元素之和。初始值為0。
使用兩個嵌套的循環結構,我們遍歷位于矩陣內部的元素,即從第二行到倒數第二行,從第二列到倒數第二列。我們忽略了第一行、最后一行、第一列和最后一列的元素。
在每個內部元素的位置,我們將該元素的值累加到sum
中。
最后,我們使用printf
函數輸出sum
的值,表示矩陣內部元素之和。
編譯并運行上述代碼,根據給定的輸入示例,將會輸出"7",表示矩陣內部元素之和為7。
第4題:整數排序
給定10個整數的序列,要求對其重新排序。排序要求:
1.奇數在前,偶數在后;
2.奇數按從大到小排序;
3.偶數按輸入順序逆序排序。
時間限制:1000
內存限制:65536
輸入
輸入一行,包含10個整數,彼此以一個空格分開,每個整數的范圍是大于等于0,小于等于100。
輸出
按照要求排序后輸出一行,包含排序后的10個整數,數與數之間以一個空格分開。
樣例輸入
4 7 3 13 11 12 0 47 34 98
樣例輸出
47 13 11 7 3 98 34 0 12 4
以下是使用C語言編寫的解決方案,用于對給定的10個整數進行排序:
#include <stdio.h>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}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]) {swap(&arr[j], &arr[j + 1]);}}}
}void customSort(int arr[], int n) {int odd[n];int even[n];int oddCount = 0;int evenCount = 0;for (int i = 0; i < n; i++) {if (arr[i] % 2 == 0) {even[evenCount++] = arr[i];} else {odd[oddCount++] = arr[i];}}bubbleSort(odd, oddCount);for (int i = evenCount - 1; i >= 0; i--) {printf("%d ", even[i]);}for (int i = 0; i < oddCount; i++) {printf("%d ", odd[i]);}
}int main() {int arr[10];for (int i = 0; i < 10; i++) {scanf("%d", &arr[i]);}customSort(arr, 10);return 0;
}
在此解決方案中,我們首先定義了一個函數swap
,用于交換兩個整數的值。
然后,我們定義了一個函數bubbleSort
,用于對數組進行冒泡排序。
在bubbleSort
函數中,我們使用兩個嵌套的循環結構,逐個比較相鄰的元素,并根據條件進行交換,從而將較大的元素移動到數組的前面。
接下來,我們定義了一個函數customSort
,用于按照給定的排序要求對數組進行排序。
在customSort
函數中,我們首先定義了兩個輔助數組odd
和even
,用于存儲奇數和偶數。
我們遍歷原始數組,并根據奇偶性將元素分別存儲到odd
和even
數組中。
然后,我們對odd
數組進行冒泡排序,以滿足要求的奇數排序要求。
接著,我們逆序遍歷even
數組,并按順序輸出其中的元素,以滿足偶數的逆序排序要求。
最后,我們按順序輸出odd
數組中的元素。
在main
函數中,我們定義一個整數數組arr
,用于存儲輸入的10個整數。
使用循環結構,我們讀取輸入的10個整數,并將它們存儲到arr
數組中。
然后,我們調用customSort
函數,對數組進行排序和輸出。
編譯并運行上述代碼,根據給定的輸入示例,將會輸出排序后的10個整數。
第5題:計算好數
若將一個正整數化為二進制數,在此二進制數中,我們將數字1的個數多于數字0的個數的這類二進制數稱為好數。
例如:
(13)10 = (1101)2,其中1的個數為3,0的個數為1,則此數是好數;
(10)10 = (1010)2,其中1的個數為2,0的個數也為2,則此數不是好數;
(24)10 = (11000)2,其中1的個數為2,0的個數為3,則此數不是好數;
對于給定的N,寫程序求出1~N之中(包括1與N)中的好數個數。
時間限制:1000
內存限制:65536
輸入
一個整數,題目中的N(N ≤ 1000)
輸出
一個整數,表示1~N之中(包括1與N)中的好數個數
樣例輸入
10
樣例輸出
5
以下是使用C語言編寫的解決方案,用于計算1~N范圍內的好數個數:
#include <stdio.h>int isGoodNumber(int n) {int ones = 0;int zeros = 0;while (n > 0) {if (n % 2 == 1) {ones++;} else {zeros++;}n /= 2;}return ones > zeros;
}int countGoodNumbers(int N) {int count = 0;for (int i = 1; i <= N; i++) {if (isGoodNumber(i)) {count++;}}return count;
}int main() {int N;scanf("%d", &N);int result = countGoodNumbers(N);printf("%d\n", result);return 0;
}
在此解決方案中,我們定義了兩個函數。
isGoodNumber
函數用于判斷一個整數是否為好數。我們使用循環結構,將整數轉換為二進制數,并統計其中1和0的個數。如果1的個數大于0的個數,則返回1,表示是好數;否則返回0,表示不是好數。
countGoodNumbers
函數用于計算1~N范圍內的好數個數。我們使用循環結構,從1遍歷到N,對每個數調用isGoodNumber
函數進行判斷,如果返回值為1,則計數器加1。
在main
函數中,我們首先讀取輸入的整數N。
然后,調用countGoodNumbers
函數計算好數個數,并將結果存儲到變量result
中。
最后,我們使用printf
函數輸出result
的值,表示1~N范圍內的好數個數。
編譯并運行上述代碼,根據給定的輸入示例,將會輸出"5",表示1~10范圍內的好數個數為5。