• 【笔试强训】Day1


    🌈欢迎来到笔试强训专栏


    • (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort
    • 目前状态:大三非科班啃C++中
    • 🌍博客主页:张小姐的猫~江湖背景
    • 快上车🚘,握好方向盘跟我有一起打天下嘞!
    • 送给自己的一句鸡汤🤔:
    • 🔥真正的大师永远怀着一颗学徒的心
    • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
    • 🎉🎉欢迎持续关注!
      在这里插入图片描述

    请添加图片描述

    请添加图片描述

    🌈选择题

    1.以下for循环的执行次数是()

    for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
    
    • 1

    A.是无限循环

    B.循环次数不定

    C.4次

    D.3次

    复习一下for循环(初始化部分;条件判断部分;调整部分){}
    注意注意!! y=123是赋值 为真的(看清楚)后面就是剩下x = 0、1、2、3 总共四次进入循环
    所以答案选C

    2.以下程序的运行结果是()

    #include <stdio.h>
    int main(void) {
        printf("%s , %5.3s\n", "computer", "computer");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    A.computer , puter

    B.computer , com

    C.computer , computer

    D.computer , compu.ter

    说实话做题才能查漏补缺,我们知道%s遇到\0就停止打印。是这个%5.3s 我没见过,下面来科普一下

    % m.ns:
    m : 输出字符串的宽度
    n :左起截止目标字符串的n个字符,而且是右对齐,左边不够补空格
    当字符串 > n > m :此时m的作用失效了,直接截取n
    当n > 字符串 :作用和%s一样,遇到\0就停止

    所以%5.3s 输出的是 com(com前面两个空格),答案选C

    下列main()函数执行后的结果为()

    int func(){ 
    	int i, j, k = 0;
    	for(i = 0, j = -1;j = 0;i++, j++){
    		k++;
    	}
    	return k;
    }
    int main(){
        cout << (func());
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    A.-1

    B.0

    C.1

    D.2

    本题考察的本质还是for循环执行了多少次?
    有了上面一题的基础再判断,应该不难

    这里的条件判断部分j = 0恒为假,不会进入循环所以K不会++,K等于0,答案选B

    下面程序输出是什么?

    #include <stdio.h>
    int main()
    {  
       int a=1,b=2,c=3,d=0;
       if(a == 1 && b++==2)
       if(b!=2||c--!=3)
           printf("%d,%d,%d\n" ,a,b,c);
       else 
           printf("%d,%d,%d\n" ,a,b,c);
       else 
           printf("%d,%d,%d\n" ,a,b,c);
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    A.1,2,3

    B.1,3,2

    C.3,2,1

    D.1,3,3

    吐槽一下,上面的代码很乱,且省略了{},像极了我刚开始的样子
    但是else有就近匹配原则 : 匹配最近的if
    || 逻辑或:任意一方为真,挡路原则: 左边表达式为真,右边表达式就不会执行

    在这里插入图片描述

    第一个if就判断为假,直接到最后一个printf 打印,答案是 : D

    若有定义语句: int a=10 ; double b=3.14 ; 则表达式 ‘A’+a+b 值的类型是()

    A.char

    B.int

    C.double

    D.float

    知识复习:
    'A’是char类型,占一个字节,范围是-128 ~ 127
    a是int 类型, 占4个字节,范围是 -21亿 ~ 21亿
    c是double类型,占8个字节,范围是2.310的308次方 ~ 1.710的308次方

    不同类型运算会自动提升,小范围-> 大范围 最后转换为double类型,答案选C

    下面,p[1][2]的值是()

    int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};
    
    • 1

    A.1

    B.0

    C.6

    D.2
    每个大括号是一行,都没有进行完全初始化,没初始化的默认为0

    在这里插入图片描述

    数组坐标从0开始,看图 所以答案是B

    选择表达式 11|10 的结果(本题数值均为十进制)()

    A.11

    B.10

    C.8

    D.2

    简单的逻辑运算
    在这里插入图片描述

    所以答案选A

    int fun(int a){
     a^=(1<<5)-1;
     return a;
    }
    
    • 1
    • 2
    • 3
    • 4

    fun(21)运行结果是()

    A.10

    B.5

    C.3

    D.8

    此处要注意:1<<5 后等于32 ,再-1 等于31, 最后是a^31 也就是21^31
    ^ : 相等为0 ,相异为1
    在这里插入图片描述

    答案是A

    若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()

    A.*p+=1;

    B.(*p)++;

    C.++(*p)

    D.*p++

    考察的是运算符优先级的问题,忘了要多复习复习
    在这里插入图片描述
    得知 *的优先级大于 +=()的优先级比++高,唯独++的优先级比*要高,没有对1009进行++,而是对指针++.

    毫无疑问 ,答案选D

    下面关于"指针"的描述不正确的是()

    A.当使用free释放掉一个指针内容后,指针变量的值被置为NULL

    B.32位系统下任何类型指针的长度都是4个字节

    C.指针的数据类型声明的是指针实际指向内容的数据类型

    D.野指针是指向未分配或者已经释放的内存地址

    解析:
    A:free指针只是把指向的空间销毁了 ,指针的值置空是要我们手动置空

    ps:造成野指针的三大原因

    1. 定义时,没有初始化
    2. free掉后,没有置空
    3. 越界访问使用指针

    答案选A

    🌈编程题

    1️⃣组队竞赛

    题目链接:组队竞赛

    在这里插入图片描述在这里插入图片描述

    思路讲解:

    在这里插入图片描述

    • 首先对数据进行排序
    • 推导出下标满足的公式 arr.len - 2*(i+1),满足最大水平和
    • 算法的头文件记不住 algorithm algorithm algorithm

    代码如下

    #include
    #include
    #include
    
    using namespace std;
    int main()
    {
        long long sum = 0;
        int n;
        cin>>n;
        vector<int> a;
        a.resize(3*n);
        
        for(int i=0; i< 3*n; ++i)
        {
            cin >> a[i];
        }
        
        std::sort(a.begin(), a.end());
        
        for(int i = 0; i < n ;i++)
        {
            sum += a[a.size()- 2*(i+1)];
        }
        cout << sum << endl;
        
        return 0;
    }
    
    • 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
    • 28

    2️⃣删除公共字符

    题目地址:添加链接描述

    在这里插入图片描述

    讲解两种思路:哈希 & 暴力

    首先是哈希

    1. 遍历这个str2字符串,把对应的字符放到hash[ ]中
    2. 遍历str1,找到hash中等于 0 的(也就是没有重复的 )

    在这里插入图片描述

    暴力法:

    • 去str1里面找str2的值,find找到相同的就erase
    //哈希
    #include 
    #include 
    using namespace std;
    
    int main()
    {
        string str1, str2;
        //cin>>str1;//cin遇到空格就停止
        getline(cin, str1);
        getline(cin, str2);
    
        int hash[256] = {0};
        for(int i = 0; i < str2.size(); i++)
        {
            hash[str2[i]]++;
        }
    
        string end ="";
        for(int i = 0; i < str1.size(); i++)
        {
            if(hash[str1[i]] == 0)//==0的就是不相同的
            {
                end += str1[i];
            }
        }
        
        cout<<end<<endl;
        return 0;
    }
    
    • 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
    • 28
    • 29
    • 30
    #include 
    #include 
    using namespace std;
    
    //暴力
    int main()
    {
        string s1,s2;
        getline(cin,s1);
        getline(cin,s2);
        for(int i = 0;i < s2.size(); i++)
        {
            while(s1.find(s2[i]) != -1)//find找不到就返回npos(-1) !=也就是找到了
            {
                s1.erase(s1.find(s2[i]),1);
            }
        }
        cout<<s1<<endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    📢写在最后

    最近刷屏的卡塔尔励志小哥

    在这里插入图片描述

  • 相关阅读:
    判断编译器类型、编译器版本、操作系统。
    拼图游游戏代码
    适用于细胞核、细胞膜、线粒体、细胞骨架的成像的荧光探针推荐
    sklearn【F1 Scoree】F1分数原理及实战代码!
    狂神linux笔记5
    计算机毕业设计ssm基于ssm的高校党建平台f80yq系统+程序+源码+lw+远程部署
    【高性能计算】NCNN源码解析笔记之
    【目标定位】基于matlab粒子滤波的定位算法【含Matlab源码 2161期】
    MySQL(2)
    【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day09
  • 原文地址:https://blog.csdn.net/qq_42996461/article/details/127970414