• SIM2022-精工书院2022级乐学机考模拟试卷


    出了这六道题还有十道题,但是这六道模拟题的难度明显更高,所以我就不更新那10道题了

    【机考01】【三】角图形输出,20分

    编写程序,从键盘输入 n ( 0 < n < 27 ),输出下面( n = 5 时 )所示的高度为 n 行的三角形图形(行尾没有空格)。

            A
    
          B B B
    
        C C C C C
    
      D D D D D D D
    
    E E E E E E E E E
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    输入:
    三角形图形的行数 (不用校验)

    输出:

    相应的三角形图形(行尾没有空格)

    #include 
    int main()
    {
       int n,i;
       char a='A',s[]="                                                                                          ";
       scanf("%d",&n);
       for(i=1;i<n+1;i++)
       {
       	printf("%.*s",2*(n-i),s);
       	for(int j=0;j<2*i-1-1;j++)
       	{
       		printf("%c ",a+i-1);
       	}
       	printf("%c",a+i-1);
       	printf("\n");
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    我这里用了一个长空格串 ( s[] ) 和格式化输出控制空格长度,也可以改成for循环

    【机考02】【天】数计算输出,20分

    【机考02】【天】数计算: 输出2022年北京冬奥会倒计时天数

    第24届冬季奥林匹克运动会(The XXIV Olympic Winter Games),即2022年北京冬季奥运会 ,将于2022年2月4日星期五开幕,2月20日星期日闭幕。北京冬季奥运会设7个大项,15个分项,109个小项。北京赛区承办所有的冰上项目;延庆赛区承办雪车、雪橇及高山滑雪项目;张家口赛区的崇礼区承办除雪车、雪橇及高山滑雪之外的所有雪上项目。

    编写程序,从键盘输入日期(YYYY-MM-DD),输出该日期距离2022年北京冬奥会开幕日(2022年2月4日)的倒计时天数。

    例如:输入 2021-10-27 , 输出: 100

    输入:

    日期 (不用校验)

    输出:

    倒计时天数
    参考之前写过的日期计算输出差值即可,也可以吧2022-2-4的天数先预处理出来

    #include 
    
    int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    
    int day(int y,int m,int d)
    {
    	if(y%4==0&&y%100!=0||y%400==0) a[2]=29;
    	else a[2]=28;
    	y--;
    	for(int i = 1;i < m;i++)
    		d += a[i];
    	d += y*365+y/4-y/100+y/400;
    	return d;
    	
    }
    
    int main()
    {
    	int y,m,d;
    	scanf("%d-%d-%d",&y,&m,&d);
    	printf("%d\n",day(2022,2,4)-day(y,m,d));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    【机考03】 哥【俩】好( 新版 ), 20分

    其实新版比原版简单
    【机考03】哥【俩】好(新版): 一维数组元素两两相乘

    编写程序,从键盘输入一维数组的元素个数(不超过21个)和数组中每个元素的内容,然后输出一维数组中元素两两相乘的结果。

    输出要求:

    ① 元素两两相乘的顺序是第一个元素与最后一个元素相乘,第二个元素与倒数第二个元素相乘,... ... ;
    
    ② 如果数组元素个数为奇数,则最中间的数自己与自己相乘,实现两两相乘;
    
    ③ 输出结果的行首和行尾都没有空格。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输入:

    第一行数据为数组中总的元素个数,第二行数据为数组各个元素的具体内容,例如:

    7
    
    1 2 3 4 5 6 7
    
    • 1
    • 2
    • 3

    输出:

    一维数组元素两两相乘的结果(行首和行尾都没有空格),例如:

    7 12 15 16
    
    • 1
    #include 
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	int a[n+1],i = 1,j=n;
    	for(i = 1; i <= n; i ++) scanf("%d",&a[i]);
    	for(i = 1; i <= j; i ++, j --)
    		printf("%d%c", a[i]*a[j],i < j - 1 ? ' ' : '\n');
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    【机考04】【回】文字符串构建,20分

    【机考04】【回】文字符串: 对任一字符串,构建一个回文字符串

    “回文字符串”是一个正读和反读都一样的字符串,比如 “xyZyx” 或者 “12345cbAbc54321” 等就是回文字符串。

    编写程序,从键盘输入一个【 字符串 s 】(其长度为 n , 0 < n < 22 ),构建一个回文字符串并输出。

    本题回文字符串构建规则:

     ① 构建的回文字符串的长度为 :2 * n - 1 ;
    
      ② 构建的回文字符串的最右边 n 个字符正好是 【 字符串 s 】 本身 ;
    
    • 1
    • 2
    • 3

    输入:

    字符串,如 "12345ABC" 或 "Zyx"
    
    • 1

    输出:

    构建的回文字符串,如 "CBA543212345ABC" 或 "xyZyx"
    
    • 1

    其实就是正常输出再倒序输出一遍
    (我这里用绝对值单纯炫技没啥实际价值)

    #include 
    #define abs(x) x>0?x:-x
    int main()
    {
    	char in[24],x;
    	int n,i=0;
    	while((x=getchar())!='\n') in[i++]=x;
    	for(n=-i+1;n<i;n++) printf("%c",in[abs(n)]);
    	printf("\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    【机考05】【超】市购物车结算,20分

    【机考05】【超】市购物: 购物车应付账款结算
    小明在某购物平台开了一家名为“21极品超市”的网店,只售卖21种商品,每种商品明码标价,不打折扣;
    网店库房货量充足,从不缺货;承诺订单生成之后,三天之内发货。
    顾客在“21极品超市”网站将选好的多种商品及数量加入购物车后,点击【结账】,即会生成采购清单。
    编写程序,根据从键盘输入的某购物车的购物清单,进行该购物车的应付账款结算。
    购物车购物清单的输入格式如下(如果选购了 n 种商品,则有 3 + n + 21 行数据):

    ⑴ 第一行,系统生成的订单号;
    ⑵ 第二行,选购商品的种类数 n ( 0 < n < 22 ) ;
    ⑶ 随后的 n 行 ,每行包括一种【已选购】商品的编号和相应数量;
    ⑷ 一行分隔符,"----------------" ,可用类似 {char s[100]; scanf("%s",&s[0]);} 跳过此行内容;
    ⑸ 再随后的 21 行,每行包括一种【在售商品】的编号和单价,编号从 0001 至 0021 ,已排序。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输入:购物车的购物清单。下面为选购【 3 种商品】时的购物清单输入示例:

    XM10000135
    3
    0018,3
    0001,25
    0007,49
    ----------------
    0001,  45.48
    0002,   7.67
    0003,  52.05
    0004,  59.00
    0005,  52.53
    0006,  44.17
    0007,  19.78
    0008,  20.87
    0009,  51.69
    0010,  97.50
    0011,  75.85
    0012,  42.36
    0013,  21.60
    0014,  75.01
    0015,  79.45
    0016,  65.48
    0017,  15.40
    0018,  45.55
    0019,  37.19
    0020,  80.32
    0021,   1.83
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    输出用 %12.2f 格式输出购物车应付账款金额,如:

    2242.87
    
    • 1

    这题就有点意思了,因为只有21种商品,所以可以默认21种商品都买了0个,然后卖了的改一下个数就行,最后没卖的商品价格一定是0

    #include 
    
    int main()
    {
    	char rub[100];
    	int num,n,w[22]={0},x;
    	float p,sum;
    	scanf("%*s");
    	scanf("%d",&num);
    	for(int i = 0;i < num;i++)
    	{
    		scanf("%d,%d",&n,&x);
    		w[n]=x;
    	}
    	scanf("%*s");
    	for(int i = 1;i < 22;i++)
    	{
    		scanf("%*d,%f",&p);
    		sum += p*w[i];
    	}
    	printf("%12.2f\n",sum);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    【机考06】 校【车】座位预订,20分

    【机考06】 校【车】座位预约:输出可预约的最小座位号
    某大学的校车连接南北两个校区,每天对开多趟,为广大师生跨区的教学、工作和生活等活动提供
    强有力的交通保障。为确保每日校车有序高效运行,校后勤集团采用了校车座位预约系统进行座位预约,
    采取“先约先得”的规则,用户可从尚没有预约的座位中随意挑选座位号。校车准乘 51 人(不含司机),
    校车内部座位图如下所示,具体说明:
    ⑴ 可以预约的座位号:从 01 至 51 号, 共 51 个座位;
    ⑵ 最前面的第 00 排包含 驾驶室 和 一个超级座位: 第 51 号;
    ⑶ 第 01 排 至 第 10 排,每排 5 个座位,座位号见下图:

                    校   车   头   部
    
    +-------------+--------------------+------+
    |   驾 驶 室  |    非  座  位  区  |  51  | 第 00 排
    +------+------+------+------+------+------+
    |  01  |  11  |  21  |      |  31  |  41  | 第 01 排
    +------+------+------+      +------+------+
    |  02  |  12  |  22  |      |  32  |  42  | 第 02 排
    +------+------+------+      +------+------+
    |  03  |  13  |  23  |  过  |  33  |  43  | 第 03 排
    +------+------+------+      +------+------+
    |  04  |  14  |  24  |      |  34  |  44  | 第 04 排
    +------+------+------+      +------+------+
    |  05  |  15  |  25  |      |  35  |  45  | 第 05 排
    +------+------+------+      +------+------+
    |  06  |  16  |  26  |      |  36  |  46  | 第 06 排
    +------+------+------+      +------+------+
    |  07  |  17  |  27  |  道  |  37  |  47  | 第 07 排
    +------+------+------+      +------+------+
    |  08  |  18  |  28  |      |  38  |  48  | 第 08 排
    +------+------+------+      +------+------+
    |  09  |  19  |  29  |      |  39  |  49  | 第 09 排
    +------+------+------+      +------+------+
    |  10  |  20  |  30  |      |  40  |  50  | 第 10 排
    +------+------+------+------+-----+-------+
    
                    校   车   尾   部
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    小明常乘坐校车往返两个校区,虽然很少能预约到 01 号座位,但他是有个性的青年,每次预约座位时,
    都是从可预约的座位池中,选择最小的座位号。
    编写程序,根据当前校车的座位预约图谱数据,为小明选择座位号。
    座位号输出格式为 %02d ;如果已经满座,则输出"**"。

    校车的当前座位预约图谱数据(共 12 行)见示例,格式说明如下:
      ⑴ 第一行,为当天校车运行的车次号( 001 至 999 );
      ⑵ 随后的 11 行,每行 5 列,为第 00 排 至 第 10 排的座位预约情况;
      ⑶ 上述 ⑵所述的 11 行 5 列数据中各字符的含义:
          'H' - 司机座位,驾驶重地,双倍空间
          '/' - 非座位区,严禁超载,不卖站票
          '*' - 当前座位已经被预约,不可预约
          '+' - 当前座位可以预约
    例如:第 00 排的数据为 "HH//*"时,表示第51号座位已经被预约,不能预约;
          第 00 排的数据为 "HH//+"时,表示第51号座位可以预约;
          第 06 排的数据为 "**++*"时,表示第06,16,46号座位已经被预约,第26,36号座位可以预约;
          第 10 排的数据为 "*****"时,表示第10,20,30,40,50号座位已经全部被预约。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    输入校车的最新座位预约图谱,第1行(车次号)+ 11行5列(第00排,01排,…,第10排)座位预约数据,示例:

    032
    HH//*
    **+++
    *****
    ***+*
    *****
    *****
    **+*+
    *****
    *****
    *****
    *****
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    输出可预约的最小座位号( %02d ),如果当前校车已经满座,则输出"**",示例:

    21
    
    • 1

    只要先按行存图,再按列遍历即可(别忘了51特殊处理)

    #include   
    int main(){  
        char sit[10][5],y;  
        scanf("%*s\nHH//%c\n",&y);
        int i,j;
        for(i = 0;i < 10;i ++) gets(sit[i]);
        for(j = 0;j < 5;j ++) 
    		for(i = 0;i < 10;i ++) 
    			if(sit[i][j]=='+') 
    			{ 
    				printf("%02d\n",j*10+i+1); 
    				return 0; 
    			}
        if(y=='+') printf("51\n");
        else printf("**\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    包管理工具--》其他包管理器之cnpm、pnpm、nvm
    noip2012Vigenère 密码
    hadoop使用笔记
    性能测试工具Loadrunner以及性能测试的流程以及每一个步骤的流程和结果分析
    Yolov5更换主干网络之《旷视轻量化卷积神经网络ShuffleNetv2》
    你的RPCvs佬的RPC
    14 异常处理 & 日志
    codeforces每日5题(均1700)
    如何用cmd命令进行:①删除文件夹中指定文件;②删除文件夹中所有文件;③删除文件夹。
    怎样避免执行走样
  • 原文地址:https://blog.csdn.net/CharlesHsuu/article/details/128209729