首页 > 代码库 > 厦门大学考研上机真题

厦门大学考研上机真题

厦门大学考研上机真题

 

来自于:王道论坛-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 }

运行结果如下:

技术分享

第一行输入元素的个数

第二行输入数组元素

第三行输入排序后的结果

 

厦门大学考研上机真题