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

查找

题目描述: 
     
    输入数组长度 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循环实现即可

  #include <stdio.h>
  #include <stdlib.h> 

  int main()
  {
    int a[101], b[101];
    int n, m, i, j, flag; 

    while(scanf("%d", &n) != EOF)
    {
      //接收输入数组
      for(i = 0; i < n; i ++)
      {
        scanf("%d", a + i);
      }
      //接收查找数组
      scanf("%d", &m);
      for(j = 0; j < m; j ++)
      {
        scanf("%d", b + j);
      }
      //判断查找存在
      for(j = 0; j < m; j ++)
      {
        flag = 0;
        for(i = 0; i < n; i ++)
        {
          if(b[j] == a[i])
          {
            flag = 1;
            break;
          }
        }
        if(flag)
        {
          printf("YES\n");
        }else
        {
          printf("NO\n");
        }
      }
    }
    return 0;
  }

如果现在,我绝对会利用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代码

  #include <stdio.h>
  #include <stdlib.h> 

  int partition(int *A, int left, int right);
  void quicksort(int *A, int begin, int end); 

  int main()
  {
    int i, j, n, k;
    int a[1001]; 

    while(scanf("%d",&n) != EOF)
    {
      //接受stdin输入数据
      for(i = 0; i < n; i ++)
      {
        scanf("%d",a + i);
      }
      scanf("%d",&k); 

      //快速排序
      quicksort(a, 0, n - 1); 

      //输出第k小的数
      for(i = 0, j = 0; i < n && j < k; i ++)
      {
        if(a[i] != a[i + 1])
        {
          if(j == k - 1)
          {
            printf("%d\n",a[i]);
            break;
          }else
          {
            j ++;
          }
        }
      }
    } 

    return 0;
  } 

  void quicksort(int *A, int begin, int end)
  {
    int pivot; 

    if(begin < end)
    {
      pivot = partition(A, begin, end);
      quicksort(A, begin, pivot - 1);
      quicksort(A, pivot + 1, end);
    }
  } 

  int partition(int *A, int left, int right)
  {
    int stand = A[left]; 

    while(left < right)
    {
      while(left < right && A[right] >= stand)
      {
        right --;
      }
      if(left < right)
      {
        A[left ++] = A[right];
      }
      while(left < right && A[left] <= stand)
      {
        left ++;
      }
      if(left < right)
      {
        A[right --] = A[left];
      }
    }
    A[left] = stand; 

    return left;
  }

打牌

题目要求:

题目描述:

牌只有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代码:

  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h> 

  int main()
  {
    char a[101];
    char b[101];
    char ch, key;
    int i, lena, lenb, flag;
    int count[11]; 

    while(scanf("%s",a) != EOF)
    {
      //接收回车符
      ch = getchar();
      //接收出牌
      scanf("%s",b);
      ch = getchar();
      //长度
      lena = strlen(a);
      lenb = strlen(b);
      //初始化
      memset(count,0,sizeof(count));
      //遍历手牌
      for(i = 0; i < lena; i ++)
      {
        count[a[i] - '0'] ++;
      }
      //检测对方出牌
      switch(lenb)
      {
        case 1:
        case 2:
        case 3:
        case 4:
          flag = 0;
          for(key = b[0] - '0' + 1; key <= 9; key ++)
          {
            if(count[key] >= lenb)
            {
              flag = 1;
              break;
            }
          }
          break;
        case 5:
          flag = 0;
          for(key = b[0] - '0' + 1; key < 9; key ++)
          {
            if(count[key] > 0 && count[key + 1] > 0 && count[key + 2] > 0 && count[key + 3] > 0 && count[key + 4] > 0)
            {
              flag = 1;
              break;
            }
          }
          break;
      }
      //打印输出
      if(flag)
      {
        printf("YES\n");
      }else
      {
        printf("NO\n");
      } 

    }
    return 0;
  }
(0)

相关推荐

  • 北邮计算机考研复试题的C语言解答精选

    二进制数 题目 题目描述:      大家都知道,数据在计算机里中存储是以二进制的形式存储的.      有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的.      你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0.      输入:      第一行,一个数字T(T<=1000),表示下面要求的数字的个数.      接下来有T行,每行有一个数字n(0<=n<=10^8),表示要求的

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

    查找 题目描述:            输入数组长度 n       输入数组 a[1...n]       输入查找个数m       输入查找数字b[1...m]             输出 YES or NO 查找有则YES 否则NO .      输入:            输入有多组数据.      每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100).      输出:            如果在n个数组中输出YES否则输出NO.   

  • C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include <stdio.h> #include <stdlib.h> int main() { int N,i,j,n,num=1; int a[10][10]={0}; printf("输入你要输出的几阶中断:"); scanf("%d",&N); for(n=0;n<=N/2;n++) { for(j=n;j<=N-n-1;j++) a[n][j]=num++; fo

  • 非常经典的C语言趣味题目

    http://stevenkobes.com/ctest.html 在这个网站上发现一套很有趣的C语言测试题,如果你招聘C语言相关开发人员,或者正在学习C语言,很值得做一做. 如果没有做,下面内容暂时不要看,最好自己先完成一遍. OK,假设你做的答案没有完全正确,那你可以继续看下去了,否则,后面内容对你来说就是小菜一碟,不值得看. 第一题: #include <setjmp.h>static jmp_buf buf;int main(void){volatile int b = 3;if (s

  • C语言--数字交换题目详解

    目录 一.题目分析 二.算法分析和设计 心路历程 位置分析 分析交换算法 回顾总结(问题核心) 三.编写代码 四.出现问题 总结 一.题目分析 大致题意就是通过交换把最小的数放到最前面,最大的数放最后面.另外要求编写三个函数. 二.算法分析和设计 心路历程 题目有四个关键词,最大值和最小值,第一个数和最后一个数.这就是我们分析的重点. 接下来先对最大值和最小值分析,如果两个数的值相同,位置相同,说明所有的数据都相同,我们什么都不用做.如果两个数的值不同,位置肯定也不同,所以最大值和最小值的位置关

  • javascript实现C语言经典程序题

    最近在学习Javascript语言,看到网上很多都是在介绍Javascript如何解决网页上问题的代码,所以想另辟蹊径,用Javascript代码来实现C语言经典程序题.当然,这些C语言程序题也是比较简单,主要想通过Javascript语言实现,起到语法练习作用,也想来对比一下C语言和Javascript语言实现的相同点和不同点,从而巩固记忆,加强学习效果!!! 一.C语言经典程序题1 1. 题目描述: 马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人,女人,小孩.他们在一家饭馆中吃

  • PHP 分页类(模仿google)-面试题目解答

    笔试回答的不太好,特别是JS部分,也是许久都没复习的原因. 上机题目是要写一个仿google分页的类,当要取类似9/2的最大整数,却怎么也想不起函数ceil的名字,晕了半天. 最后测试程序没错误,但是就是不能正常显示,后来(回家后)一查才知道是语句:for($i=0;$i++;$i<9)写错了,于是下决心重新写一遍,于是就有了下面的代码了: 复制代码 代码如下: <?php /* 显示样式如下: [1] 2 3 4 5 6 7 8 9 10 ...100 下页 尾页 首页 上页 1..12 1

  • JavaScript 一道字符串分解的题目

    去某公司(公司名不说了,人这套题说不定还要用)面试,现场30分钟做了一套题,其中有一道是这样的: 要求用js写一个函数,对传入的形如下网址字符串,返回对应的对象. 如: 若传入字符串a='?name=zhiyelee&blog=www.tsnrose.com'; 则返回 b={'name':'zhiyelee','blog':'www.tsnrose.com'} 当时由于时间比较短,实现的有些问题,回来后想了一下,总结如下: 我想到了两种思路,一种是使用正则表达式,第二种是使用字符串的split

  • C语言用函数实现电话簿管理系统

    本文实例为大家分享了C语言用电话簿管理系统的具体代码,供大家参考,具体内容如下 c语言上机课程 纠结了很久用函数还是链表,顺序表 感觉函数比较简单 实现: 最后显示对齐还可以使用"%3d%20s%20s%20s\n"使字节对齐 我用的\t 不够灵活 输入位数不一样的数时就不能对齐了 #include<stdio.h> #include<string.h> typedef struct Contact { char name[21]; char phone[21]

  • C语言详细分析宏定义与预处理命令的应用

    目录 宏定义与预处理命令 预处理命令 - 宏定义 定义符号常量 定义傻瓜表达式 定义代码段 预定义的宏 函数 VS 宏定义 预处理命令 - 条件式编译 示例 宏定义与预处理命令 预处理阶段:处理宏定义与预处理命令: 编译期:检查代码,分析语法.语义等,最后生成.o或.obj文件: 链接期:链接所有的.o或.obj文件,生成可执行文件. 预处理命令 - 宏定义 定义符号常量 #define PI 3.1415926 #define MAX_N 10000 定义傻瓜表达式 #define MAX(a

随机推荐