首页 > 编程 > C++ > 正文

北邮考研复试C语言上机题目精选

2020-05-23 14:15:51
字体:
来源:转载
供稿:网友

这篇文章主要介绍了北邮考研复试C语言上机题目精选,摘自2010年北邮CS的复试,需要的朋友可以参考下

查找

题目描述:

输入数组长度 n

输入数组 a[1...n]

输入查找个数m

输入查找数字b[1...m]

输出 YES or NO 查找有则YES 否则NO 。

输入:

输入有多组数据。

每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。

输出:

如果在n个数组中输出YES否则输出NO。

样例输入:

5

1 5 2 4 3

3

2 5 6

样例输出:

YES

YES

NO

AC代码:

这道题没任何难度,就是两个for循环实现即可

 

 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.  
  4. int main()  
  5. {  
  6. int a[101], b[101];  
  7. int n, m, i, j, flag;  
  8.  
  9. while(scanf("%d", &n) != EOF)  
  10. {  
  11. //接收输入数组  
  12. for(i = 0; i < n; i ++)  
  13. {  
  14. scanf("%d", a + i);  
  15. }  
  16. //接收查找数组  
  17. scanf("%d", &m);  
  18. for(j = 0; j < m; j ++)  
  19. {  
  20. scanf("%d", b + j);  
  21. }  
  22. //判断查找存在  
  23. for(j = 0; j < m; j ++)  
  24. {  
  25. flag = 0;  
  26. for(i = 0; i < n; i ++)  
  27. {  
  28. if(b[j] == a[i])  
  29. {  
  30. flag = 1;  
  31. break;  
  32. }  
  33. }  
  34. if(flag)  
  35. {  
  36. printf("YES/n");  
  37. }else 
  38. {  
  39. printf("NO/n");  
  40. }  
  41. }  
  42. }  
  43. return 0;  
  44. }  

如果现在,我绝对会利用Java的HashMap去做这道题目

查找第K小数

题目描述:

查找一个数组的第K小的数,注意同样大小算一样大。

如 2 1 3 4 5 2 第三小数为3。

输入:

输入有多组数据。

每组输入n,然后输入n个整数(1<=n<=1000),再输入k。

输出:

输出第k小的整数。

样例输入:

6

2 1 3 5 2 2

3

样例输出:

3

AC代码:

考察的就是简单的快速排序,上我的AC代码

 

 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.  
  4. int partition(int *A, int left, int right);  
  5. void quicksort(int *A, int begin, int end);  
  6.  
  7. int main()  
  8. {  
  9. int i, j, n, k;  
  10. int a[1001];  
  11.  
  12. while(scanf("%d",&n) != EOF)  
  13. {  
  14. //接受stdin输入数据  
  15. for(i = 0; i < n; i ++)  
  16. {  
  17. scanf("%d",a + i);  
  18. }  
  19. scanf("%d",&k);  
  20.  
  21. //快速排序  
  22. quicksort(a, 0, n - 1);  
  23.  
  24. //输出第k小的数  
  25. for(i = 0, j = 0; i < n && j < k; i ++)  
  26. {  
  27. if(a[i] != a[i + 1])  
  28. {  
  29. if(j == k - 1)  
  30. {  
  31. printf("%d/n",a[i]);  
  32. break;  
  33. }else 
  34. {  
  35. j ++;  
  36. }  
  37. }  
  38. }  
  39. }  
  40.  
  41. return 0;  
  42. }  
  43.  
  44. void quicksort(int *A, int begin, int end)  
  45. {  
  46. int pivot;  
  47.  
  48. if(begin < end)  
  49. {  
  50. pivot = partition(A, begin, end);  
  51. quicksort(A, begin, pivot - 1);  
  52. quicksort(A, pivot + 1, end);  
  53. }  
  54. }  
  55.  
  56. int partition(int *A, int left, int right)  
  57. {  
  58. int stand = A[left];  
  59.  
  60. while(left < right)  
  61. {  
  62. while(left < right && A[right] >= stand)  
  63. {  
  64. right --;  
  65. }  
  66. if(left < right)  
  67. {  
  68. A[left ++] = A[right];  
  69. }  
  70. while(left < right && A[left] <= stand)  
  71. {  
  72. left ++;  
  73. }  
  74. if(left < right)  
  75. {  
  76. A[right --] = A[left];  
  77. }  
  78. }  
  79. A[left] = stand;  
  80.  
  81. return left;  
  82. }  

打牌

题目要求:

题目描述:

牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。

规则:出牌牌型有5种

[1]一张 如4 则5...9可压过

[2]两张 如44 则55,66,77,...,99可压过

[3]三张 如444 规则如[2]

[4]四张 如4444 规则如[2]

[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。

输入:

输入有多组数据。

每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。

输出:

压过输出YES 否则NO。

样例输入:

12233445566677

33

样例输出:

YES

注意事项:

开始提交了3次,都是wa,发现有一种测试用例我无法通过,也是上个代码错误的地方,测试用例如下:

样例输入:1122335566778899(不连续)12345

样例输出:yes

AC代码:

 

 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.  
  5. int main()  
  6. {  
  7. char a[101];  
  8. char b[101];  
  9. char ch, key;  
  10. int i, lena, lenb, flag;  
  11. int count[11];  
  12.  
  13.  
  14. while(scanf("%s",a) != EOF)  
  15. {  
  16. //接收回车符  
  17. ch = getchar();  
  18. //接收出牌  
  19. scanf("%s",b);  
  20. ch = getchar();  
  21. //长度  
  22. lena = strlen(a);  
  23. lenb = strlen(b);  
  24. //初始化  
  25. memset(count,0,sizeof(count));  
  26. //遍历手牌  
  27. for(i = 0; i < lena; i ++)  
  28. {  
  29. count[a[i] - '0'] ++;  
  30. }  
  31. //检测对方出牌  
  32. switch(lenb)  
  33. {  
  34. case 1:  
  35. case 2:  
  36. case 3:  
  37. case 4:  
  38. flag = 0;  
  39. for(key = b[0] - '0' + 1; key <= 9; key ++)  
  40. {  
  41. if(count[key] >= lenb)  
  42. {  
  43. flag = 1;  
  44. break;  
  45. }  
  46. }  
  47. break;  
  48. case 5:  
  49. flag = 0;  
  50. for(key = b[0] - '0' + 1; key < 9; key ++)  
  51. {  
  52. if(count[key] > 0 && count[key + 1] > 0 && count[key + 2] > 0 && count[key + 3] > 0 && count[key + 4] > 0)  
  53. {  
  54. flag = 1;  
  55. break;  
  56. }  
  57. }  
  58. break;  
  59. }  
  60. //打印输出  
  61. if(flag)  
  62. {  
  63. printf("YES/n");  
  64. }else 
  65. {  
  66. printf("NO/n");  
  67. }  
  68.  
  69. }  
  70. return 0;  
  71. }  

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表