当前位置: 首页 > news >正文

【C++】 —— 笔试刷题day_17

一、小乐乐改数字

题目解析

这道题,它们给定一个数,我们要对它进行修改;如果某一位是奇数,就把它变成1,;如果是偶数,就把它变成0;

让我们输出最后得到的数。

算法思路

这道题,总体来说是非常简单的啦,解法呢,就是模拟整个过程。

当然呢这里模拟,也不是去一次去这个数的某一位去操作,那太麻烦了。

我们可以直接按照字符串进行输出,然后遍历字符串,判断这一个数是奇数还是偶数,然后进行操作。

这里我们通过查看ASSIC码可以发现,字符09数字0到9它的奇偶性是一样的,所以我们进行判断时就不用去-'0'

最后呢我们需要取出前缀0,这里可以使用stoi函数,也可以自己实现去除前缀0

代码实现

#include<iostream>#include<string>usingnamespacestd;string str;intmain(){cin>>str;for(inti=0;i<str.size();i++){if(str[i]%2==0)str[i]='0';elsestr[i]='1';}cout<<stoi(str)<<endl;return0;}

二、十字爆破

题目解析

OK啊,这道题输入一个n*m的二维数组,让我们求它每一个位置方格的得分情况,最后输出。

得分规则:arr[i][j]位置的得分等于第i行和第j列所有数的和。

算法思路

题目描述很简单,现在我们来看如何去解决这道问题;

首先暴力解法,当我们求某一个位置的得分时,去遍历它这一行和这一列所有的数,然后求和。(这里肯定会超时)

暴力解法不行,那我们来想一想有没有什么可以优化的:

我们在求(i,j)位置时,要用到第i行所有数的和;在求(i,j-1)位置时,也要用到第i行所有数的和;

那我们是不是可以预先将每一行/每一列所有数的和求出来,这样我们在求某一个位置的得分时就不用去遍历了。

**OK啊,这里我们的思路就出来了:**就是先将每一行/每一列所有数的和求出来,然后求(i,j)位置的和直接用第i行的和加上第j列的和,再减去i,j位置的数就可以了。(这里第i行会计算一遍(i,j)位置,第j列也会计算(i,j)位置,所有要减去一个(i,j)位置的值)。

代码实现

#include<iostream>usingnamespacestd;constintN=1e6+10;intn,m;longlongrow[N];longlongcol[N];intmain(){scanf("%ld %ld",&n,&m);longlongarr[n][m];for(inti=0;i<n;i++){for(intj=0;j<m;j++){scanf("%ld",&arr[i][j]);row[i]+=arr[i][j];col[j]+=arr[i][j];}}//记录完成以后输出for(inti=0;i<n;i++){for(intj=0;j<m;j++){printf("%ld ",row[i]+col[j]-arr[i][j]);}printf("\n");}return0;}

三、比那名居的桃子

题目解析

题目描述:小红想要吃桃子,吃完桃子以后每天可以获得ai的快乐值,获得bi个羞耻值,桃子效果可以持续k天。

现在我们要求,小红在哪一天吃桃子可以获得尽可能多的快乐值;(如果快乐值相等,就让羞耻值尽可能小)。

算法思路

对于这道题,我们可以使用暴力解法,遍历数组,遍历到i位置时,求一下从i位置开始k天的快乐值和羞耻值。

对于暴力解法,我们就要进行优化:

滑动窗口:

我们在求从i位置开始和从i+1位置开始时,这两个区间的差别就是i位置和i+k位置;

所以我们在处理求i+1位置开始时,只需要让i位置开始求出的值减去i位置,加上i+k位置即可。

这里我们需要记录区间内快乐值的和hSum,也要记录区间内羞耻值的和sSum;还要记录一下当前快乐值的最大值hMax和当前羞耻值的最小值sMin

当然对于这道题,我们还可以使用前缀和来解决:

通过暴力解法和优化的滑动窗口,我们可能发现,我们需要从i位置开始,k个数据的和;

那我们能不能先求出来这个和呢?

我们对于hs数组,分别创建一个对应的hSumsSum数组,这两个数组中存放的就是每一个位置之前所有数的和。

hSum[i]i位置之前h中所有数的和;

sSum[i]i位置之前s中所有数的和;

这里我们在遍历i位置时,我们可以直接拿到从i位置开始k个数据的和numhnumh = hSum[i+k-1] - hSum[i-1])和numsnums = sSum[i+k-1] - sSum[i-1])。

这样我们遍历是时候,取到numhnums然后判断更新结果就好了。

这需要注意,我们在遍历i位置时,需要用到i-1位置和i+k-1位置,所以我们从1开始遍历,直到n-k[1 , n-k+1])

这样对于大于n-k+1小于等于n的位置的数据,从这些位置开始,后面是没有k个数据的。

代码实现

滑动窗口:

#include<iostream>usingnamespacestd;constintN=1e5+10;longlongn,k;longlongh[N+1],s[N+1];longlonghSum[N+1],sSum[N+1];intmain(){//滑动窗口cin>>n>>k;for(inti=1;i<=n;i++)cin>>h[i];for(inti=1;i<=n;i++)cin>>s[i];intleft=1,right=1;longlonghSum=0,sSum=0,hMax=0,sMin=0;intret=0;while(right<=n){hSum+=h[right];sSum+=s[right];while(right-left+1>k){hSum-=h[left];sSum-=s[left];left++;}if(right-left+1==k){//更新结果if((hSum>hMax)||(hSum==hMax&&sSum<sMin)){ret=left;hMax=hSum;sMin=sSum;}}right++;}cout<<ret<<endl;return0;}

前缀和:

#include<iostream>usingnamespacestd;constintN=1e5+10;longlongn,k;longlongh[N+1],s[N+1];longlonghSum[N+1],sSum[N+1];intmain(){//前缀和cin>>n>>k;for(inti=1;i<=n;i++){cin>>h[i];hSum[i]=hSum[i-1]+h[i];}for(inti=1;i<=n;i++){cin>>s[i];sSum[i]=sSum[i-1]+s[i];}intret=0;longlonghMax=0,sMin=0;for(inti=1;i<=n-k+1;i++){longlongnumh=hSum[i+k-1]-hSum[i-1];longlongnums=sSum[i+k-1]-sSum[i-1];if((numh>hMax)||(numh==hMax&&nums<sMin)){ret=i;hMax=numh;sMin=nums;}}cout<<ret<<endl;return0;}

到这里本篇文章就结束了,继续加油

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

http://www.jsqmd.com/news/929147/

相关文章:

  • 魔兽争霸3技术重生指南:从兼容性困境到流畅体验的完整方案
  • SAI:5分钟掌握安卓拆分APK安装的终极指南
  • 从零制作单管音频放大器:用D313晶体管驱动喇叭的实践指南
  • SMUDebugTool终极指南:解锁AMD Ryzen处理器深层性能的5个关键步骤
  • 别再为训练CLIP烧显卡发愁了!EVA-CLIP的三大‘省钱’技巧实测(附代码)
  • 阴阳师脚本OnmyojiAutoScript网络连接问题:从诊断到修复的完整指南
  • Sketchfab下载终极指南:3步轻松获取3D模型资源的完整教程
  • 组学对比:蛋白质组>2组学整合>代谢组?
  • AI文本的索引性崩溃:大语言模型为何生成空洞权威论述
  • 亚洲EMBA世界排名最新榜单|五大顶尖项目实力解析
  • 情感真实性跃迁92.6%!Sora 2新增7类隐式情绪触发器,开发者必须立即适配的5个API变更点
  • System Prompt vs User Prompt:一个管「你是谁」,一个管「你要什么」
  • 如何轻松解锁中兴光猫完整权限:智能网络管理工具实战指南
  • 如何快速安装APA第7版参考文献格式:3分钟搞定Microsoft Word学术排版
  • 图形化编程入门嵌入式:用Visuino与Seeeduino XIAO实现LED闪烁
  • 普定县26年最新奢侈品名包名表专业回收权威店铺推荐 - 莘州文化
  • 猫抓插件完全指南:浏览器视频下载的终极解决方案
  • DIY便携焊接工作站:利用Makita电池改造烙铁,集成照明功能
  • Granite-3B-Code-Base-2K进阶技巧:如何优化提示工程获得最佳代码生成效果
  • 鸣潮游戏自动化工具:如何用智能脚本告别重复操作
  • 终极免费QQ音乐QMC解码器:3分钟实现音乐跨平台播放自由
  • 鹿寨县26年最新奢侈品名包名表专业回收权威店铺推荐 - 莘州文化
  • 七星关区26年最新奢侈品名包名表专业回收权威店铺推荐 - 莘州文化
  • 基于双卡尔曼滤波(DEKF)的soc估计,在线更新模型参数,还可以估计本周期内soh的小幅度变化166 附赠对应的参考文档。
  • 德江县26年最新奢侈品名包名表专业回收权威店铺推荐 - 莘州文化
  • 用74HCT逻辑门搭建多谐振荡器:从RC定时原理到非稳态/单稳态电路实践
  • 为什么你的Sora 2复杂场景总“穿模”或“失重”?4个被官方文档隐藏的物理引擎参数必须手动校准
  • Video2X终极指南:零基础实现AI视频画质增强与超分辨率
  • 解放双手的智能战斗伴侣:炉石佣兵战记自动化脚本完全指南
  • 亚洲EMBA特色盘点:五大顶尖项目差异化优势与择校指南