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

C++前缀和差分(练习题)

连续数的和(模拟法)

【描述】给出两个整数n和k,(2≤n≤70000,1≤k≤n),求出1,2,3,…,n中连续k个数的和,并计算出和为平方数的个数。
例如n=10,k=3。在1,2,…,10中,连续3个数的和有
1+2+3=6
2+3+4=9
3+4+5=12
4+5+6=15
5+6+7=18
6+7+8=21
7+8+9=24
8+9+10=27
其中和为平方数的仅有9,因为9=3×3。
【输入】
n,k两个整数。
【输出】
一个整数,即1,2,…,n中连续k个数的和为平方数的个数。
【输入样例1】
10 3
【输出样例1】
1

#include<iostream>#include<cmath>usingnamespacestd;// 一个整数n是否平方数boolis_square(longlongn){longlongm=sqrt(n);//求n的平方根,类型转换时向下取整returnm*m==n;}intmain(){intn,k;scanf("%d %d",&n,&k);intcnt=0;//注意局部变量定义时要初始化为0// 逐个查看区间和是否是平方数// 连续k个数的区间 [i,i+k-1]区间和 = sum[i+k-1] - sum[i-1]for(inti=1;i<=n-k+1;i++){// 累加 k个连续数: s = i + (i+1)+ ...+(i+k-1) = k*i + k*(k-1)/2longlongs=i*k+k*(k-1)/2;if(is_square(s))cnt++;}printf("%d\n",cnt);`在这里插入代码片`return0;}/* 【输入用例2】 100 3 【输出用例2】 5 【输入用例3】 200 6 【输出用例3】 5 【输入用例4】 500 10 【输出用例4】 6 【输入用例5】 999 12 【输出用例5】 0 */

连续数的和(前缀和法)

【描述】给出两个整数n和k,(2≤n≤70000,1≤k≤n),求出1,2,3,…,n中连续k个数的和,并计算出和为平方数的个数。
例如n=10,k=3。在1,2,…,10中,连续3个数的和有
1+2+3=6
2+3+4=9
3+4+5=12
4+5+6=15
5+6+7=18
6+7+8=21
7+8+9=24
8+9+10=27
其中和为平方数的仅有9,因为9=3×3。
【输入】
n,k两个整数。
【输出】
一个整数,即1,2,…,n中连续k个数的和为平方数的个数。
【输入样例1】
10 3
【输出样例1】
1

#include<iostream>#include<cmath>usingnamespacestd;longlongsum[70010];//前缀和数组// 一个整数n是否平方数boolis_square(longlongn){longlongm=sqrt(n);//求n的平方根,类型转换时向下取整returnm*m==n;}intmain(){intn,k;scanf("%d %d",&n,&k);for(inti=1;i<=n;i++)sum[i]=sum[i-1]+i;//预计算前缀和intcnt=0;//注意局部变量定义时要初始化为0// 逐个查看区间和是否是平方数// 连续k个数的区间 [i,i+k-1]区间和 = sum[i+k-1] - sum[i-1]for(inti=1;i<=n-k+1;i++){if(is_square(sum[i+k-1]-sum[i-1]))cnt++;}printf("%d\n",cnt);return0;}/* 【输入用例2】 50 2 【输出用例2】 4 【输入用例3】 300 9 【输出用例3】 15 【输入用例4】 500 19 【输出用例4】 5 【输入用例5】 800 88 【输出用例5】 5 【输入用例6】 2025 25 【输出用例6】 41 */

区间修改后求和

【描述】对数组多次区间加操作后求最终数组
【输入描述】首先第一行输入两个数n,m;数字n表示数组的元素个数,m表示对数组操作的次数。接下来一行输入n个数组元素,接下来m行输入操作详细说明:定义l, r, c,l与r表示需要操作的数组元素区间(l<=r),c表示加操作的值;
【输出描述】输出进行加操作之后的数组
【样例输入】
5 3
1 2 3 4 5
1 5 1
2 4 2
3 3 -1
【样例输出】
2 5 5 7 6

#include<iostream>usingnamespacestd;// 定义最大数组长度(预留10个额外空间防止越界)constintN=1e5+10;intn,m;inta[N],d[N];// a为原数组,d为差分数组// 差分数组区间更新函数:对区间[l, r]的元素增加cvoidinsert(intl,intr,intc){d[l]+=c;// 左端点+l的差分值if(r+1<=n)d[r+1]-=c;// 右端点+1的差分值(防止越界)}intmain(){cin>>n>>m;// 输入数组长度和操作次数for(inti=1;i<=n;i++)cin>>a[i];// 构建差分数组d[1]=a[1];for(inti=2;i<=n;i++){d[i]=a[i]-a[i-1];}// 处理m次区间更新操作while(m--){intl,r,c;cin>>l>>r>>c;insert(l,r,c);}// 通过差分数组还原最终结果(前缀和)for(inti=1;i<=n;i++){d[i]+=d[i-1];// 累加差分值得到当前元素cout<<d[i]<<" ";}return0;}/* 【输入用例2】 1 1 5 1 1 3 【输出用例2】 8 【输入用例3】 3 2 0 -1 2 1 3 -5 2 2 10 【输出用例3】 -5 4 -3 【输入用例4】 4 2 10 20 30 40 1 2 5 3 4 -10 【输出用例4】 15 25 20 30 【输入用例5】 6 3 3 1 4 1 5 9 2 5 0 1 6 -3 3 3 100 【输出用例5】 0 -2 101 -2 2 6 【输入用例6】 5 3 5 4 3 2 1 1 5 2 2 4 2 3 3 -3 【输出用例6】 7 8 4 6 3 */

交错和

【描述】求数组中偶数位数值与奇数位数值的差值(数位表示数组下标的数字,0属于偶数)
【输入描述】输入为两行,第一行表示数组的长度,第二行输入n个数组元素
【输出描述】输出数组中所有偶数位元素相加后的值减所有奇数位元素相加的值
【样例输入】
4
1 2 3 4
【样例输出】
-2

#include<iostream>usingnamespacestd;intmain(){intn;// 数组长度cin>>n;inta[n],d[n]={0};// 原数组a,差分数组d(初始化为0)// 输入原数组并构建差分数组for(inti=0;i<n;i++){cin>>a[i];// 输入原数组元素// 根据索引奇偶性生成差分值:偶数位取正,奇数位取负d[i]=(i%2==0)?a[i]:-a[i];}intsum=0;// 累加差分数组的中间结果// 从第二个元素开始累加差分值(索引从1到n-1)for(inti=1;i<n;i++)sum+=d[i];// 输出结果:首元素 + 差分累加和cout<<sum+a[0];return0;}/* 【输入用例2】 1 5 【输出用例2】 5 【输入用例3】 2 1 2 【输出用例3】 -1 【输入用例4】 3 2 3 4 【输出用例4】 3 【输入用例5】 6 3 7 2 8 1 9 【输出用例5】 -18 【输入用例6】 5 5 -5 5 -5 5 【输出用例6】 25 */

矩阵对称性

【描述】判断一个矩阵是否关于主对角线对称,主对角线是指从矩阵的左上角到右下角连成的线
【输入描述】第一行输入n,表示矩阵的维度(矩阵的行、列默认均为n)接下来输入矩阵所有的行列元素
【输出描述】如果矩阵对称输出YES,否则输出NO
【样例输入】
4
1 2 3 4
2 3 4 3
3 4 5 2
4 3 2 1
【样例输出】
YES

#include<iostream>usingnamespacestd;intmain(){intn;// 矩阵维度cin>>n;inta[n][n],s[n][n]={0};// 原矩阵a,前缀和矩阵s(初始化为0)// 输入原矩阵并构建前缀和数组for(inti=1;i<=n;i++){for(intj=1;j<=n;j++){cin>>a[i][j];// 前缀和公式:s[i][j] = 上方 + 左方 - 左上角 + 当前值s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];}}boolok=true;// 对称性标志// 检查所有i < j的对称子矩阵for(inti=1;i<=n;i++){for(intj=i+1;j<=n;j++){// 计算左下三角区域和(从(i,j)到(n,n))intsum1=s[n][n]-s[i-1][n]-s[n][j-1]+s[i-1][j-1];// 计算右上三角区域和(从(j,i)到(n,n))intsum2=s[n][n]-s[j-1][n]-s[n][i-1]+s[j-1][i-1];if(sum1!=sum2)ok=false;// 不对称则标记失败}}cout<<(ok?"YES":"NO");// 输出结果return0;}/* 【输入用例2】 1 5 【输出用例2】 YES 【输入用例3】 2 1 2 2 1 【输出用例3】 YES 【输入用例4】 3 1 2 3 2 3 4 3 4 5 【输出用例4】 YES 【输入用例5】 4 1 2 3 4 2 3 4 5 3 4 5 6 4 5 7 7 【输出用例5】 NO 【输入用例6】 3 1 0 0 0 0 1 1 0 0 【输出用例6】 NO */
http://www.jsqmd.com/news/1018213/

相关文章:

  • 2026 年专业设计显示器怎么选?皓丽 27RUA-LA 核心卖点与选购建议 - 服务品牌热点
  • LLVM 优化实战:Pass 管线与后端代码生成
  • 2026淄博闲置黄金变现避坑指南!6家正规回收门店实测盘点 - 余生黄金回收
  • 抖音批量下载工具完全指南:从单视频到用户主页的高效解决方案
  • 3分钟打造个性化透明任务栏:TranslucentTB美化指南
  • 淄博旧金金条怎么卖?2026正规黄金回收实体门店实测汇总 - 余生黄金回收
  • PostgreSQL日期处理避坑指南:从‘时区混淆’到‘闰秒难题’的实战解析
  • 3步完成Windows系统VC++运行库一体化部署方案:运维人员终极指南
  • 北京美国留学社科类英语提升陪跑:稳步规划实用方法分享 - 虚拟星辰
  • 2026年6月最新|江苏无尘车间净化公司实测排行榜单 本地专业净化工程厂家哪家好 - 商业新知
  • 2026年长沙铝合金门窗招商加盟与定制采购|系统窗品牌对标评测 - 企业名录优选推荐
  • 别再只设自动保存了!Allegro 17.4/22.1版本数据安全完整方案:备份脚本+云盘同步实战
  • 如何高效管理PS1游戏存档:MemcardRex完整实用指南
  • 轻量级推理引擎开发:从模型加载到推理执行的 Rust 实战
  • 李妍锡身着黑礼服亮相上影节红毯,武汉乡音倾情推介《密档》
  • 如何彻底解决64位游戏乱码问题:Locale Remulator区域模拟器完整指南
  • 手把手教你搞定创维E900-S高安版刷机:从识别板号到当贝桌面完美运行
  • 深入解析DSPI的FIFO机制与传输配置:从基础SPI到工业级通信
  • 嵌入式C++开发:名称修饰与XGATE编译器优化实战解析
  • 2026晋中装修售后服务排行榜——30分钟响应+30年质保成行业标杆 - 装企自媒体训练营辉哥
  • 酒店投资加盟品牌推荐:2026年投资回报与加盟体系横向对比 - 科技焦点
  • 【趣解】HTTPS:加密版HTTP的安全升级
  • 告别命令行恐惧:用RedisInsight 2.0图形化搞定Redis监控与调试(附Docker一键部署)
  • 终极方案:Locale Remulator深度解析——64位应用程序区域语言模拟完全指南
  • 分享一下我的Agent 学习路线
  • 【2026年6月】净化工程设计厂家优质企业推荐|净化工程设计,净化车间施工,净化车间安装优选|无锡一净净化设备有限公司 - 多才菠萝
  • 5步完整教程:使用OpenCore Legacy Patcher解决老Mac硬件兼容性问题
  • 城通网盘解析工具:3分钟实现高速下载的完整指南
  • MPC866 PowerQUICC架构解析:通信协处理器与嵌入式网络设计
  • 2026年6月邢台人卖黄金前必看的回收行情与靠谱商家清单 - 余生黄金回收