1. 程式人生 > >廈門大學考研上機真題

廈門大學考研上機真題

排序 pos else 大寫 出現 16進制 bsp input 回文

廈門大學考研上機真題

來自於:王道論壇-2017廈大計算機專碩復試題

技術分享

判斷回文數字

第一題判斷一個整數是否為回文數,例如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進制不進位的加法,輸入要考慮大小寫的不同,輸出只要大寫。

這個題不知道什麽意思,暫時沒做

最大子串和.c

求一個整型數組,所有子串中元素和最大的子串,輸出和是多少,子串是什麽。比如 {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 }

運行結果如下:

技術分享

第一行輸入元素的個數

第二行輸入數組元素

第三行輸入排序後的結果

廈門大學考研上機真題