• 厦门大学考研上机真题


    厦门大学考研上机真题

    来自于:王道论坛-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
    ");
    18         else
    19             printf("No
    ");
    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
    ", 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[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 }

    运行结果如下:

    第一行输入元素的个数

    第二行输入数组元素

    第三行输入排序后的结果

  • 相关阅读:
    新学期,新起点
    判断整数的正负零特性
    C# 静态类与非静态类、静态成员的区别
    适配器模式:类适配器和对象适配器
    设计模式学习笔记
    C# 全局变量的实现
    设计模式
    Tuples in .Net 4 (System.Tuple)
    EnableViewState
    HashMap 、HashTable、HashSet的区别
  • 原文地址:https://www.cnblogs.com/hello-lijj/p/7152296.html
Copyright © 2020-2023  润新知