用函数怎么写
本帖最后由 牵风 于 2021-12-2 17:19 编辑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);
}
} 本帖最后由 傻眼貓咪 于 2021-12-1 21:53 编辑
#include <stdio.h>
int f(int a, int x, int b, int y, int m, int n, int arr){
int res = 0;
for(size_t i = a; i <= b; i++)
for(size_t j = x; j <= y; j++)
res += arr;
return res;
}
int main()
{
int M, N, Q;
scanf("%d%d", &M, &N);
int a;
for(size_t m = 0; m < M; m++)
for(size_t n = 0; n < N; n++)
scanf("%d", &a);
scanf("%d", &Q);
int res, LX, LY, RX, RY;
for(size_t q = 0; q < Q; q++){
scanf("%d%d%d%d", &LX, &LY, &RX, &RY);
res = f(LX, LY, RX, RY, M, N, a);
}
for(size_t i = 0; i < Q; i++) printf("%d\n", res);
return 0;
} 傻眼貓咪 发表于 2021-12-1 21:51
为什么会时间超限 牵风 发表于 2021-12-1 21:57
为什么会时间超限
表示我的代码不是最优,40% 数据采用 Q = 100000 肯定超时了,时间复杂度:大于 O(n^2) 傻眼貓咪 发表于 2021-12-1 22:15
表示我的代码不是最优,40% 数据采用 Q = 100000 肯定超时了,时间复杂度:大于 O(n^2)
哦哦
页:
[1]