news 2026/6/15 17:46:52

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 */
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 17:45:50

如何通过网页版暗黑2存档编辑器轻松定制你的游戏体验

如何通过网页版暗黑2存档编辑器轻松定制你的游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 对于暗黑破坏神2的忠实玩家来说&#xff0c;角色的成长路径、装备搭配和技能组合往往决定了游戏体验的深度。然而&#xff0c…

作者头像 李华
网站建设 2026/6/15 17:45:50

用SAS宏精确控制时间执行

在SAS编程中,处理时间相关问题常常需要精确的控制,以确保程序在特定时间段内或特定时间点执行或停止执行。本文将探讨如何使用SAS宏来实现这一目标,并以一个实际案例为例,展示如何确保宏在下午1点之前运行。 背景介绍 假设我们有一个需要在每天下午1点前执行的任务,任务…

作者头像 李华
网站建设 2026/6/15 17:44:52

PowerPC指令集深度解析:从RISC原理到MPC885嵌入式实战应用

1. 项目概述&#xff1a;从手册到实战&#xff0c;解码MPC885 PowerQUICC指令集如果你和我一样&#xff0c;在嵌入式领域摸爬滚打多年&#xff0c;从8位机一路干到32位&#xff0c;那么对Freescale&#xff08;现NXP&#xff09;的PowerQUICC系列一定不会陌生。当年第一次拿到M…

作者头像 李华
网站建设 2026/6/15 17:44:52

AI与大模型新闻日报 | 2026-06-15

AI与大模型新闻日报20260615大模型技术共 3 条新闻1. 科大讯飞 AI 眼镜开启预售&#xff1a;支持 122 种语言翻译&#xff0c;4299 元来源: IT 之家时间: 2026-06-14 23:34摘要: IT之家 6 月 15 日消息&#xff0c;科大讯飞旗下讯飞 AI 眼镜现已在京东开启预售&#xff0c;产品…

作者头像 李华