廈門大學考研上機真題
判斷回文數字
第一題判斷一個整數是否為回文數,例如123321
1 #include <stdio.h> 2 3 // 判斷是否為回文數列 4 int main() 5 { 6 int num, huiwei, temp; 7 while(scanf("%d", &num) != EOF) 8 { 9 temp = num; 10 huiwei = 0; 11 while(temp > 0) 12 { 13 huiwei = huiwei * 10 + (temp % 10); 14 temp = temp / 10; 15 } 16 if(huiwei == num) 17 printf("Yes\n"); 18 else 19 printf("No\n"); 20 } 21 }
第二題求a-b之間的非素數個數,用最小的代價。
1 #include <stdio.h> 2 #include <math.h> 3 4 // a-b之間的非素數個數,用最小的代價 5 6 int isPrime(int n) 7 { 8 int i; 9 int flag = 1; 10 int m = (int)sqrt(n) + 1; 11 if(n < 2) flag = 0; 12 for(i = 2; i < m; i++) 13 { 14 if(n % i == 0) 15 { 16 flag = 0; 17 break; 18 } 19 } 20 return flag; 21 } 22 23 24 int main() 25 { 26 int a, b; 27 int i, count = 0; 28 while(scanf("%d %d", &a, &b) != EOF) 29 { 30 for(i = a; i <= b; i++) 31 { 32 if(isPrime(i) == 0) //not prime 33 count++; 34 } 35 printf("%d", count); 36 } 37 return 0; 38 }
第三題16進制不進位的加法,輸入要考慮大小寫的不同,輸出只要大寫。
這個題不知道什么意思,暫時沒做
求一個整型數組,所有子串中元素和最大的子串,輸出和是多少,子串是什么。比如 {1,2,3,4,5,-1,-2}最大子串是{1,2,3,4,5},和是15。
這個題目好像是求最大子數列和問題。並給出最大數列
1 #include <stdio.h> 2 3 int main() 4 { 5 int n, num[1001], i; 6 int maxSum = 0, subSum = 0; 7 int start, t, end; 8 scanf("%d", &n); 9 for(i = 0; i < n; i++) 10 { 11 scanf("%d", &num[i]); 12 } 13 14 for(i = 0; i < n; i++) 15 { 16 subSum += num[i]; 17 if(subSum < 0) 18 { 19 subSum = 0; 20 t = i + 1; 21 } 22 if(subSum > maxSum) 23 { 24 maxSum = subSum; 25 start = t; 26 end = i; 27 } 28 } 29 printf("%d\n", maxSum); 30 for(i = start; i <= end; i++) 31 printf("%d ", num[i]); 32 return 0; 33 }
運行結果如下
第一行輸入 數列個數
第二行 輸入 數列
第三行 輸出最大子數列和
第四行 輸出最大和的數列
求出現的最多的次數
1 #include <stdio.h> 2 // 大概的思路就是定義兩個數組,一個用於存儲數字,另一個用於存該數字 3 // 出現的次數 4 5 int main() 6 { 7 int n[101], count[101] = {0}; 8 int num, i, j, max = 0, max_index; 9 scanf("%d", &num); 10 for(i = 0; i < num; i++) 11 { 12 scanf("%d", &n[i]); 13 count[i] += 1; 14 } 15 16 for(i = 0; i < num; i++) 17 { 18 for(j = i+1; j < num; j++) 19 if(n[i] == n[j]) 20 count[i] ++; 21 } 22 // find max 23 for(i = 0; i < num; i++) 24 { 25 if(count[i] > max) 26 { 27 max = count[i]; 28 max_index = i; 29 } 30 } 31 32 printf("%d\n", n[max_index]); 33 return 0; 34 }
運行結果
第一行輸入個數
第二行輸入數字
第三行輸出出現最多的數字
快速排序
快速排序主要是把樹上的代碼看了遍,自己理解了一下,然后自己默寫下來
1 #include <stdio.h> 2 3 int qk_pass(int n[], int low, int high) 4 { 5 int x = n[low]; 6 while(low < high) 7 { 8 while(low < high && x <= n[high]) //hign 從右往左找比x小的值 9 high--; 10 if(low < high) // 找到了x > n[hight]的情況 11 { 12 n[low] = n[high]; 13 low++; 14 } 15 while(low < high && x >= n[low]) 16 low++; 17 if(low < high) 18 { 19 n[high] = n[low]; 20 high --; 21 } 22 } 23 n[low] = x; 24 return low; 25 } 26 27 void quick_sort(int n[], int low, int high) 28 { 29 int pos = 0; 30 if(low < high) 31 { 32 pos = qk_pass(n, low, high); 33 quick_sort(n, low, pos-1); 34 quick_sort(n, pos+1, high); 35 } 36 } 37 38 int main() 39 { 40 int n[101], num, i; 41 scanf("%d", &num); 42 // input 43 for(i = 0; i < num; i++) 44 { 45 scanf("%d", &n[i]); 46 } 47 // quick sort 48 quick_sort(n, 0, num-1); 49 // output 50 for(i = 0; i < num; i++) 51 { 52 printf("%d ", n[i]); 53 } 54 return 0; 55 }
運行結果如下:
第一行輸入元素的個數
第二行輸入數組元素
第三行輸入排序后的結果