【笔试强训】Day1

简介: 【笔试强训】Day1

🌈选择题


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


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


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;
}


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;
}


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;
}


A.1,2,3


B.1,3,2


C.3,2,1


D.1,3,3


吐槽一下,上面的代码很乱,且省略了{},像极了我刚开始的样子

但是else有就近匹配原则 : 匹配最近的if

|| 逻辑或:任意一方为真,挡路原则: 左边表达式为真,右边表达式就不会执行


0a2653c851af460fa595bd959398a8f1.png


第一个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}};


A.1


B.0


C.6


D.2

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


0a2653c851af460fa595bd959398a8f1.png


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


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


A.11


B.10


C.8


D.2


简单的逻辑运算


0a2653c851af460fa595bd959398a8f1.png


所以答案选A


int fun(int a){
 a^=(1<<5)-1;
 return a;
}


fun(21)运行结果是()


A.10


B.5


C.3


D.8


此处要注意:1<<5 后等于32 ,再-1 等于31, 最后是a^31 也就是21^31

^ : 相等为0 ,相异为1


0a2653c851af460fa595bd959398a8f1.png


答案是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:造成野指针的三大原因


定义时,没有初始化

free掉后,没有置空

越界访问使用指针

答案选A


🌈编程题


1️⃣组队竞赛

题目链接:组队竞赛


0a2653c851af460fa595bd959398a8f1.png


思路讲解:


2d65d23f6d4748949b924e4057485923.png


首先对数据进行排序

推导出下标满足的公式 arr.len - 2*(i+1),满足最大水平和

算法的头文件记不住 algorithm algorithm algorithm

代码如下


#include<iostream>
#include<algorithm>
#include<vector>
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;
}


2️⃣删除公共字符

题目地址:添加链接描述


0a2653c851af460fa595bd959398a8f1.png


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


首先是哈希


遍历这个str2字符串,把对应的字符放到hash[ ]中

遍历str1,找到hash中等于 0 的(也就是没有重复的 )


2d65d23f6d4748949b924e4057485923.png


暴力法:


去str1里面找str2的值,find找到相同的就erase

//哈希
#include <iostream>
#include <string>
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;
}


#include <iostream>
#include <string>
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;
}


相关文章
|
4月前
|
人工智能 Java 网络安全
|
人工智能 小程序 Android开发
鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性
本文介绍了华为的HarmonyOS(鸿蒙系统),这是一个面向全场景的分布式操作系统,不仅适用于手机和平板,还支持电脑、车机、手表、电视等多种设备。文章详细解析了鸿蒙系统的三大特性:一次开发多端部署、可分可合自由流转、统一生态原生智能,并分析了鸿蒙系统为何能蚕食安卓市场份额的原因。猫林老师认为,鸿蒙凭借其先进的技术和国内政策支持,有望在未来的市场中占据重要地位。最后,文章提供了学习鸿蒙系统的建议和一些课后练习,帮助读者更好地理解和掌握这一系统。
1844 7
鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性
|
XML NoSQL 大数据
大数据中半结构化数据
【10月更文挑战第18天】
1320 4
|
机器学习/深度学习 自然语言处理 开发者
大语言模型应用框架介绍
大型语言模型(LLM)是在大规模文本数据上训练而成,用于执行自然语言处理任务的深度学习模型,如文本分类、问答、总结和生成等。尽管LLM如ChatGPT、GPT-3、LaMDA等备受关注,但其泛化能力和特定任务优化方面仍有限制。为此,应用框架如LangChain应运而生,提供了更优化的解决方案。学习LLM应用框架可循序渐进,掌握其应用场景及常见框架,构建具体应用。
|
SQL 安全 网络安全
网络安全攻防实战:黑客与白帽子的较量
【6月更文挑战第29天】网络安全战场,黑客与白帽子的博弈日益激烈。黑客利用漏洞扫描、DDoS、SQL注入等手段发起攻击,而白帽子则通过防火墙、入侵检测、数据加密等技术防守。双方在技术与智慧的较量中,未来将更多融入AI、区块链等先进技术,提升攻防效率与安全性。面对网络威胁,提升技能与意识至关重要。
|
机器学习/深度学习 存储 自然语言处理
深度学习之模型剪枝
模型剪枝(Model Pruning)是深度学习中一种减少模型复杂度、提高计算效率的方法。通过删除冗余的神经元或连接,剪枝能够在不显著影响模型性能的前提下,减少模型参数数量、降低计算和存储需求。
922 3
|
Kubernetes 调度 数据中心
在K8S中,Pod中关于资源有request和limit两个字段?这么设计的原因是什么?
在K8S中,Pod中关于资源有request和limit两个字段?这么设计的原因是什么?
|
机器学习/深度学习 人工智能 安全
【亮剑】无密码身份验证的概念,它通过生物识别、安全令牌等替代技术验证身份,旨在提高安全性和用户体验。
【4月更文挑战第30天】本文探讨了无密码身份验证的概念,它通过生物识别、安全令牌等替代技术验证身份,旨在提高安全性和用户体验。无密码验证简化登录、增强安全性,但也面临实施成本、技术兼容性和用户适应性的挑战。随着技术发展,无密码验证有望成为更广泛的安全认证方式,但实施时需综合考虑多种因素。
506 0
|
存储 网络协议 数据管理
|
安全 网络安全 网络架构
个人电脑蓝屏问题的几个解决方法
电脑在使用过程中偶尔会出现死机蓝屏,蓝屏问题有许多原因,例如驱动程序或软件过期、系统文件损坏或硬件出现故障等等。
703 0

热门文章

最新文章