用二维数组前缀和怎么写
C语言二维数组a, 给定四个整数LX,LY,RX,RY, 定义函数f(LX,LY,RX,RY)求数组若干元素之和:输入
输入第一行是两个整数M和N, 表示二维数组a的大小, 0<M,N<=300。
随后有M行, 每行有N个整数,是数组a的数组元素值,值位于-1000到1000之间。
第M+2行是一个整数Q,表示有Q个查询
再随后有Q行,每行有四个空格分开的整数LX,LY,RX,RY。其中0<=LX<=RX<M, 0<=LY<=RY<N
60%的数据, M,N<=20, Q<=20
40%的数据, Q=100000
输出
总共输出Q行
对于每一行查询,输出f(LX,LY,RX,RY)的值。
样例输入 Copy
3 2
-1 -2
-3 -4
-5 -6
3
0 0 0 1
1 1 2 1
1 0 2 1
样例输出 Copy
-3
-10
-18
#include <stdio.h>
int main() {
int m,n;
scanf("%d %d",&m,&n);
int a;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
scanf("%d",&a);
int lx,ly,rx,ry;
int q;
scanf("%d",&q);
for(int i=0;i<q; i++) {
int s=0;
scanf("%d %d %d %d",&lx,&ly,&rx,&ry);
for(int k=lx; k<=rx; k++)
for(int j=ly; j<=ry; j++)
s+=a;
printf("%d\n",s);
}
} 本帖最后由 jhq999 于 2021-12-2 20:53 编辑
#include <stdio.h>
int sumfuc(int* a,int n,int lx,int ly,int rx,int ry)
{
int s=0;
for (int i = lx; i <=rx; i++)
{
for (int j = ly; j <=ry; j++)
{
s+=a;//s=*(a+i*n+j);
}
}
return s;
}
int main() {
int m,n;
scanf("%d %d",&m,&n);
int *a=new int;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
scanf("%d",&a);//scanf("%d",a+i*n+j);
int lx,ly,rx,ry;
int q;
scanf("%d",&q);
for(int i=0;i<q; i++) {
int s=0;
scanf("%d %d %d %d",&lx,&ly,&rx,&ry);
printf("%d\n",sumfuc(a,n,lx,ly,rx,ry));
}
delete[] a;
return 0;
}
页:
[1]